C++问题 基类的成员函数 是否可以调用子类的成员函数

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

应该说不可以的
这个涉及到对象问题
一般来说对于父类来说他有多少方法子类都能用,但是父类没有的子类有的父类不能用
你说把子类设置成普通类是默认的强制类型转换吧 C++在有些方面限制的比较松
以前学过点 忘得差不多了
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-19
我想知道你是在哪个编译器下编译的?正常来说,在父类中构造它的子类是不可能的,因为只有父类构造完成后才能构造其子类,所以编译器应该报错的。但是用模板可以通过编译,如下面的代码:
template<class T>
class B : public T
{
public:
void show()
{
cout << "B" << endl;
}
};

class A
{
public:
A()
{
b = new B<A>();
}
void s()
{
b->show();
}
B<A>* b;
};

但是这会引起致命的错误,会导致类似递归的无限次调用父类的构造方法。
建议你找下资料,了解下对象的构造顺序。

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

C++ 类的问题 基类成员函数可以调用子类的成员函数吗?
试试在abc里进行new然后输出,应该是可以的。忠告:不要在基类构造函数中使用任何本类的虚函数,因为构造函数在虚函数表的构建之前,所以执行结果是未知的,基类可能会也可能并不会 如你预期的那样调用子类重载的虚函数,

C++中,基类protected能给子类直接调用?
而类的对象是不能访问protected成员的,但类的成员函数是能访问protected成员的。所以,基类的成员函数能调用自己的protected成员(其对象不能),子类的成员函数也能调用基类的protected成员(其对象不能)class A{public:A(int x,int y):x(x),y(y){}protected:void print(){cout<<"x point:"<...

请在这里概述您的问题C++中,基类protected能给子类直接调用??
基类自己的private,public,protected ,在类中是无限制的,不管函数还是变量都随便调用,只不过这些调用仅限于类中定义的函数,但是在类外面,也就是类的使用者是无法调用protected ,private,但是能调用 public ,在类外面的意思就是其他使用者创建了一个该类的实例(不是类中成员函数里或者是友元函数...

C++ 的using 与继承
C++的public继承允许子类直接访问和调用基类的成员函数。然而,继承时可能会遇到构造函数或子类与基类存在同名函数的冲突问题。例如:在实现基类和子类间的函数重用时,当参数数量增加时,直接调用基类函数变得复杂,这时可以引入using声明。使用using后,子类可以直接调用基类的成员函数,如:这样简化了代码,避免...

c++基类对象如何调用子类函数
void display(){ cout<<"D1"<<endl;} };void fun(B0 * ptr){ ptr->display();} void funB1(B1 *ptr){ ptr->displayB1();} int main(){ B0 b0,*p;B1 b1;D1 d1;p=&b0;fun(p);p=&b1;fun(p);funB1((B1 *)p); \/\/调用子类函数 p=&d1;fun(p);return 0;} ...

对于C++中说基类成员函数只能访问基类成员,而不能访问派生类的成员...
{ public:void f(){ cout << b.y;\/\/试图访问派生类对象的成员 } };class B : public A { public:static int x;int y;};情况2:class B;\/\/前置声明 class A { public:void f(){ cout << B::x;\/\/试图访问派生类的静态成员。这里会出错,因为编译器此时还不能获取到B::x的定义 ...

C++问题?
当调用子类的函数A时,实际的运行顺序如下:子类的函数A被调用。子类的函数A内部会调用基类的函数B。由于基类的函数B是虚函数,因此会根据对象的实际类型来确定要调用的函数。由于子类重写了基类的函数B,所以实际会调用子类的函数B。子类的函数B执行完毕后,控制流回到子类的函数A,继续执行子类函数A中的...

c++问题 多态 virtual 和const
C++的动态多态是指对于一个成员函数的调用将根据对象的动态类型信息(多态机制的开销)执行不同的成员函数(这个函数是在基类中声明的虚函数并在派生类中可能被重写)。但是这里有两个前提:调用成员函数时必须通过基类的指针或者引用调用;被调用的成员函数必须是虚函数。对于一个非虚函数(普通成员函数)...

C++中,基类能引用派生类的成员函数吗?能引用派生类的对象吗?
如果基类中声明的参数相同的同名虚函数,就能引用;否则不能。基类中不能直接引用派生类的对象,同楼上的,可以把派生类当作基类来使用。

相似回答