- 论坛徽章:
- 0
|
构造函数?
这里A没有提供缺省构造函数,所以编译器提供。并且扩展A的构造函数为:
A::A()
{
vptr=...//设定虚函数表
C();
B();
}
这是你自己想的,实际上不是这样的,而且你想的这个也是不可行的.
首先你合成出来的这个是错误的,其次vptr也不是在这里初始化的,这种显示的调用构造函数是不好的
- #include <iostream>;
- using namespace std;
- class A
- {
- public:
- int i;
- A():i(10){cout<<i<<endl;size();}
- virtual void size(){cout<<sizeof(A)<<endl;}
- };
- class B :public A
- {
- public:
- int j;
- //B():j(20){A();cout<<i<<","<<j<<endl;size();}//显式的调用构造函数不是系统会构造出来的.
- B():A(),j(20){cout<<i<<","<<j<<endl;size();}//符合初始化的程序
- virtual void size(){cout<<sizeof(B)<<endl;}
- };
- int main()
- {
- B b;
- system("pause");
- }
复制代码
你可以去掉注释,把下面那个构造函数注释,看看结果. |
|