初始化列表中基类构造函数调用派生类函数
#include <iostream>
using std::cout;
using std::endl;
class Base
{
public:
Base(int para)
{
a = para;
cout << "Base::a = " << a << endl;
}
private:
int a;
};
class Derive : public Base
{
public:
int foo()
{
cout << "Derived::foo() return 0" << endl;
return 0;
}
Derive() : Base(foo()) {}
};
class Derive2 : public Base
{
public:
int foo()
{
cout << "Derive2::foo() return " << a << endl;
return a;
}
Derive2() : a(0), Base(foo()) {}
private:
int a;
};
int main(void)
{
Derive cld;
Derive2 cld2;
//Base *bptr = new Derive;
//bptr->foo(); //error: Base has no member named foo
return 0;
}问题:
g++编译器进行编译没有报错,能执行
为什么Base能调用派生类定义的函数foo()进行初始化,base初始化的时候
派生类部分不是还不存在吗,怎么能调用foo(),而且foo()中还有派生类中才声明的变量a
请各位解释解释~
...全文
相关推荐
在派生类的构造函数中调用基类的构造函数
《Visual C++2012入门经典(第6版)》实例,在派生类的构造函数中调用基类的构造函数
派生类的构造函数详解
派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。
派生类构造函数和析构函数的执行顺序
派生类构造函数和析构函数的执行顺序
C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar
C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar
C++构造函数的调用顺序
构造函数的执行次序如下: 1,调用基类构造函数,调用顺序按照他们的继承时声明的顺序。 2,调用内嵌成员对象的构造函数,调用顺序按照他们在类中声明的 顺序。 3,派生类的构造函数体中的内容。


