C++ 父类成员函数 可以调用子类的成员函数吗

我在父类中声明子类的指针 然后再父类的构造函数中定义这个指针 m_pSon=new Cson();
然后再父类的 成员函数 abc()中调用这个子类指针
abc()
{ m_pSon->dfg();//子类成员 函数 里面就是 cout<<"子类"<<endl;
}
编译没问题 但是运行的话 根本没有输出 如果将子类变成普通类 就可以
这是为什么呢 本人初学C++ 请大哥指点下

如果在父类的非默认构造函数初始化
m_pSon=new Cson();

在默认构造函数初始化:
m_pSon=0;
那就 可以正常调用了。

如果在父类默认构造函数这样初始化:
m_pSon=new Cson();
按理来说是应该编译错误,就算编译不报错也应该运行出错,因为会进入一个死循环,不停的申请内存,直到系统崩溃,如果楼主是在默认函数里面这样写的,那么你运行1分钟看看,是不是死机。追问

在问下 大侠 为什么m_pSon=0;就可以调用呢?这样设计思想是不是不对呀 基类是不是不应该调用子类的函数

追答

是的,你是钻研知识,可以这样来做,但是实际应用中,没人会在基类中调用子类的函数……

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-17
你这样会造成无限递归调用。因为new 子类对象时父类构造函数也会被调用,页父类构造里又继续new,这样造成一直递归调用父类的构造函数。

C++ 父类成员函数 可以调用子类的成员函数吗
那就 可以正常调用了。如果在父类默认构造函数这样初始化:m_pSon=new Cson();按理来说是应该编译错误,就算编译不报错也应该运行出错,因为会进入一个死循环,不停的申请内存,直到系统崩溃,如果楼主是在默认函数里面这样写的,那么你运行1分钟看看,是不是死机。

C++中父类方法中可以调用子类的方法吗?
不可以。继承实际上是将父类中的成员拷贝一份,添加到子类中。这个过程对父类本身没有造成改变。也就是父类中是没有子类的方法的,也就无法调用了。在一种特殊情况下,可以用父类的指针指向子类对象,然后用这个指针可以调用子类中的函数。这属于多态的范畴,实际上还是子类对象调用子类方法,与题主给...

C++问题 基类的成员函数 是否可以调用子类的成员函数
应该说不可以的 这个涉及到对象问题 一般来说对于父类来说他有多少方法子类都能用,但是父类没有的子类有的父类不能用 你说把子类设置成普通类是默认的强制类型转换吧 C++在有些方面限制的比较松 以前学过点 忘得差不多了

C++问题: 通过怎样的方式父类的对象可以直接调用子类的成员...
不可以吧!如果实在想访问,可以通过虚函数方式进行访问,比如:class father { public:virtual void* getElementsAddr(){ return null;} };class child : public father { public:virtual void* getElementsAddr(){ return &element;} private:int element;} void main(){ father &cFather = child...

c++实现多态时父类指针如何调用子类独有的数据成员?
实现多态时,C++允许父类指针调用子类独有的数据成员。此功能通过虚函数和动态类型识别(dynamic_cast)实现。首先,在父类中定义一个虚函数,该虚函数返回子类独有的数据成员。子类重写此虚函数,返回自己的数据成员。使用父类指针调用虚函数时,动态类型识别确定实际对象类型,返回正确数据。例如:c++ ...

C++类的成员函数可以调用其他类的成员函数吗
可以,通常是这样的 一般遵循面对对象设计原则,其他类希望外部调用的会设计成public,于是你可以很容易地通过指针或者对象名或者引用去调用其它类的public函数 还有其他的情况:static函数,这个可以全局调用,所以你自然也可以调用。友元关系,如果你的这个类与需要调用的其他类是友元的关系,那么你可以打破...

c++ 父类指针转换为子类指针后调用子类的成员函数,为什么可以调用成功...
其实也好理解,子类对象的类型与其父类的类型是共通的,他就是从父类继承来的,如果把子类比父类新增的成员变量或成员函数去掉,他就是一个父类的对象,当然可以调用自己的方法 不过,一般多态不是楼主这么用的,\\一般是用来参数传递上,比如一个方法,要对他传的的参数是一个父类的类型的对象,然后这个方法...

C++ 类的问题 基类成员函数可以调用子类的成员函数吗?
不要在父类的构造函数中定义这个指针。因为父类的构造函数是在子类的构造函数之前,所以如果在父类构造函数中定义的这个指针,实际上指向的东西是未知的,有些编译器会提醒,但有些编译器可以编译通过。试试在abc里进行new然后输出,应该是可以的。忠告:不要在基类构造函数中使用任何本类的虚函数,因为...

C++中两个文件中各有一个类,怎么调用另一个类中的成员
假设你想在类A里调用类B的函数int f(x),两种办法:1、class A::B 也就是说将B定义为A的父类, 这样你就可以自然的在A里面用f(x)了 2、class A { B B_ins;int g(x);} int g(x){ return B_ins.f(x)} 也就是说你可以在A里面使用一个B的对象作为成员变量,这样就可以用他的...

C++如何在一个类的成员函数中调用另一个类的成员函数
1、首先声明如下所示的类,类内部定义一个public的整型数据成员。2、主函数中定义指向类的数据成员的指针。3、声明类的对象,该对象变量调用指向类的数据成员的指针进行赋值操作。4、然后输出打印类的数据成员,从结果看,上一步的操作赋值成功。5、定义类的指针,通过指针指向对象成员的指针来进行赋值。...

相似回答