精华内容
下载资源
问答
  • c++父类调用子类方法

    千次阅读 2021-05-31 17:22:42
    c++中,父类和子类虚函数都有对应的虚函数表,如果子类重写了虚函数,就会将新写的这个函数的地址放到他自己的表内,并且通过父类的指针指向子类所开辟的空间,这样就可以调用子类方法 方法二:强转转换 但是有...

    方法一:虚函数使用

    在c++中,父类和子类虚函数都有对应的虚函数表,如果子类重写了虚函数,就会将新写的这个函数的地址放到他自己的表内,并且通过父类的指针指向子类所开辟的空间,这样就可以调用子类的方法
    在这里插入图片描述
    方法二:强转转换
    但是有的子类方法不是虚函数,这就必须要强转,将父类的指针指向子类的开辟空间的首地址,
    class Base;
    class Child: Base
    Base* Cba=new Child(); //相当于把基类Base的指针指向一个子类Chid开辟的对象,这个空间包含从Base继承

    而来的和Child独有的成员,但是因为声明指针为Base*类型,因此只能通过这个指针存取从基类继承的成员变量

    和成员函数,而不能存取子类Child自己声明的东西,因为基类指针并不能知道子类都有哪些扩展~~,如果想使用

    派生类的声明的,就需要把基类转换为派生类。
    基类转换为派生类转换方法2种,
    1、基类强制转换成派生类(不推荐)。
    2、使用dynaminc_cast进行转换(推荐);

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
     
    
    
    class  Base
    {
    public:
        void  virtual  Func()
        {
            cout << "Base\n";
        }
    };
    
    class  Derived : public  Base
    {
    public:
        void  Func()
        {
            cout << "Derived\n";
        }
    
        void  NewFunc()
        {
            cout << "New func\n";
        }
    };
    //父类指针1.虚函数使用:是根据实力的对象类型选择调用的函数     2.指针强转
    void main()
    {
    	
    
    
      /*  Derived* a = new Derived;
        a->Func();*/
    
      
    
        Base* b = new  Derived();
        b->Func();
       
         //安全转换
        Derived* d = dynamic_cast <Derived*>(b);
        if (d != NULL)
        {
            d->NewFunc();
        }
    
    	return;
    }
    
    展开全文
  • c++ 父类调用子类的方法 1 虚函数使用 2 这个方法感觉不太实用 :强转转换 c++中子类转父类,父类转子类 此文参考 c++父类调用子类方法

    c++ 父类调用子类的方法

    1 虚函数使用
    2 这个方法感觉不太实用
    :强转转换
    c++中子类转父类,父类转子类

    此文参考

    c++父类调用子类的方法

    展开全文
  • 父类调用子类方法

    2020-04-01 14:47:11
    父类调用子类方法 子类可能会在父类的基础上增加一些方法。 简单工厂模式中,会创建出子类然后将子类的指针赋给父类。 // Factory.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<...

    父类调用子类方法

    子类可能会在父类的基础上增加一些方法。
    简单工厂模式中,会创建出子类然后将子类的指针赋给父类。

    // Factory.cpp : 定义控制台应用程序的入口点。
    //
     
    #include "stdafx.h"
    #include<iostream>
     
    using namespace std;
     
    class Product
    {
    public:
        virtual void show() = 0;  
    };
     
    class Product_A : public Product
    {
    public:
        void show()
        {
            cout << "Product_A" << endl;
        }
    };
     
    class Product_B : public Product
    {
    public:
        void show()
        {
            cout << "Product_B" << endl;
        }
    };
     
    class Factory
    {
    public:
        Product* Create(int i)
        {
            switch (i)
            {
            case 1:
                return new Product_A;
                break;
            case 2:
                return new Product_B;
                break;
            default:
                break;
            }
        }
    };
     
    int main()
    {
        Factory *factory = new Factory();
        factory->Create(1)->show();
        factory->Create(2)->show();
        system("pause");
        return 0;
    }
    
    

    如果子类中增加了一些父类没有的接口,那么,基类指针就不能直接调用子类特有的接口。
    这里可以将父类指针转化为子类指针。

    using namespace std;
    
    class Base
    {
    public:
        void  virtual   Func()
        {
            cout << "Base Func\n";
        }
    };
    class Child :public Base
    {
    public:
        void Func()
        {
            cout << "Child Func\n";
        }
        void NewFunc()
        {
            cout << "Child Newfunc\n";
        }
        int number = 10;
    
    };
    //测试用例
    int main()
    {
        Base* b = new Child;//先将子类new出来,给父类
        b->Func();//输出Child Func
        Child* c_1 = dynamic_cast<Child*>(b);
        cout << c_1->number << endl;
        c_1->number = 1;
        Child* c_2 = dynamic_cast<Child*>(b);
        cout << c_2->number << endl;
        return 0;
    }
    

    在这里插入图片描述

    展开全文
  • C++实现父类调用子类函数(除虚函数)

    千次阅读 2019-06-26 09:34:55
    模板继承

    模板继承

    展开全文
  • C++父类子类间构造,析构,拷贝的调用关系 构造 子类的构造在执行它的构造函数前会根据继承表的顺序执行父类的构造函数 默认执行无参构造 #include <iostream> #include <stdio.h> #include <...
  • C++子类父类成员函数的覆盖和隐藏实例详解 函数的覆盖  覆盖发生的条件: (1) 基类必须是虚函数(使用virtual 关键字来进行声明) (2)发生覆盖的两个函数分别位于派生类和基类 (3)函数名和参数列表必须完全...
  • c++ 父类子类方法调用

    千次阅读 2012-12-29 10:46:05
    #include using namespace std; class Father{ public: int getNum(){ return 1; } private: int Num; }; class Child:public ...打开 , 无论方法是否virtual,都出现编译错误。
  • !... 我现在有这几个类,A B1 B2是接口,A是B1 B2的父类,B1 B2是C1 C2父类, 现在我用A a = new C1(); (a as C1).... 可以调用子类方法。如果父类不转为子类,还有什么方法父类可以访问到子类的方法。
  • C++父类子类

    2019-06-06 11:05:00
    先有父类,再有子类,先析构子类,再析构父类第一,子类对象在创建时会首先调用父类的构造函数第二, 父类构造函数执行结束后,执行子类的构造函数第三, 当父类的构造函数有参数时,需要在子类的初始化列表中显示...
  • c++父类子类

    千次阅读 2019-05-30 21:56:15
    父类子类的关系 子类继承父类的所有属性和行为; 子类可以定义自己的属性和行为; 父类子类的继承 在类中,变量有三种属性,分别为public,protectd,private; 其区别如下: 变量属性 说明 public 可以...
  • 父类调用子类重写方法---------多态

    千次阅读 2019-08-23 16:51:59
    1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象,调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解java继承中的初始化机制)。...
  • 主要介绍了C++类继承之子类调用父类的构造函数的实例详解的相关资料,希望通过本文大家能够掌握C++类继承的相关知识,需要的朋友可以参考下
  • c++ 子类对象调用父类方法

    千次阅读 2021-03-08 20:37:26
    第一种方式就是子类重写父类方法,在子类中定义和父类同样的方法方法体中调用父类方法 父类代码 #pragma once #include "CClientSocket.h" class CTCPInterface { public: CTCPInterface(); ~...
  • 父类调用子类的成员变量

    千次阅读 2018-05-26 16:55:21
    当变量的编译时类型和运行时类型不同时,通过该变量访问它所引用的对象的实例变量时,该实例变量的值由声明该变量的类型决定,但通过该变量调用它引用的对象的实例方法时,该方法行为由它实际所引用的对象来决定,...
  • 偶然想到,如何通过父类来获取子类的一切内容?答案是否,子类存在的意义就是青出于蓝胜于蓝,肯定是有其区别其父类的(新加的函数,变量等)。而目前也没有想到类似的应用场景呢,更多的时候多态Public函数就能够...
  • C++父类子类转化及函数调用

    千次阅读 2015-01-13 10:43:46
    这些天分析OGRE源码,里面有关C++继承及父类子类转化运用,笔记记录如下: 一 子类转化父类  这里的”转化“不是真正的转化,是一种形式上的转化,主要用于多态,定义父子类函数如下: #include "stdafx.h...
  • C++ 父类子类构造函数

    千次阅读 2019-06-04 10:30:58
    1.创建子类对象时,先调用父类构造函数(初始化父类的成员变量),再调用子类的构造函数 2.父类的构造函数不同,子类调用方式不同,分为以下几种情况: a.父类未声明构造函数(子类可以不创建构造函数,使用编译器...
  • 子类调用父类的同名函数: 子类父类返回值参数相同,...子类父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数c...
  • C++基础之子类调用父类方法

    万次阅读 2018-05-29 20:50:52
    结果:和结果效果一样,想要说明一下三点:1. vs里成员函数的函数体就算只有一条语句也要... 子类父类函数名一样的函数fun,如果参数不一样,不管加不加virtual,当子类调用fun()时,会先在子类中找,找不到会报...
  • c++中子类调用父类方法方法

    千次阅读 2020-05-29 10:49:47
    c++中子类调用父类方法方法和java所用的方式不一样, java使用super指针就可以调用c++中虽然也有this指针,但是不能用super去调用父类方法c++用的方法为:fatherClass::fatherFunction(). 1、java中的...
  • 今天遇到一个很有趣的c++写法,将其写成一个小例子分析一波。 头文件: #ifndef DEMO1_H_ #define DEMO1_H_ #include &lt;iostream&gt; #include &lt;typeinfo&gt; using namespace std; class ...
  • 背景: 在UE4 中, 有...父类中:在 初始构建的时候 Construct 中调用一个函数 比如 Init_Parent 在子类中 可以 对Ini_Parent 重载。 这样子类在构建的时候,就会默认的执行 在父类中已经提前定义好的函数Init_Parent
  • 多态是什么 父类如何调用子类方法(美团面试)

    千次阅读 多人点赞 2020-07-08 14:03:06
    对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。 来我们举个栗子: class Father { public void func1(){ func2(); } public void func2(){ System....
  • C++ 父类子类访问权限

    2020-01-30 12:03:20
  • 父类指针指向子类,构造函数调用顺序,首先调用父类构造函数,再调用子类构造函数,因此本程序先输出this is a;再输出this is b.。完成初始化。调用abtext(*x1);时,由于形参是类a,故应该调用父类的fun()函数,输出...
  • #include using namespace ... ②C++中,子类对象可以转换为父类型,而无法将父类对象强制转换为子类型; ③父类指针或引用无法访问子类新增的数据成员; */ system( "pause" ); return 0 ; }
  • #include using namespace std; class a{ public: a(){ cout; } ~a(){ cout; } }; class b:public a{ public: b(){ cout<<"b gou zao han shu
  • 子类调用父类方法 参考博客: https://blog.csdn.net/qq_26399665/article/details/52080215 https://blog.csdn.net/qq_32243677/article/details/53134446 不考虑权限原因(private) 调用方法1:函数 调用方法2:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,712
精华内容 35,484
关键字:

c++父类调用子类的方法

c++ 订阅