C++构造函数输出顺序问题

#include <iostream>

using namespace std;

class Croot

{ public:

int small;

Croot( ) { small=2;cout<<"Called Constructor1."<<endl;}

Croot(int n) { small=n; cout<<"Called Constructor2.\n";}

void showsmall() { cout<<"small="<<small<<endl; }

};

class Cder1: public Croot

{ public:

Cder1(int m) :Croot(m){}

};

class Cder2: public Croot

{ public:

int small;

Cder2(int n=0) { small=n; }

};

int main()

{ Croot A; Cder1 bb(4); Cder2 cc;

A.showsmall(); bb.showsmall(); cc.showsmall();

}

请高手帮我写清楚这个程序到底顺序是怎么执行的,底下几个对象看得我眼都花了。

至于small的问题,是因为void showsmall() { cout<<"small="<<small<<endl; }函数不是虚函数,所以不能进行多态绑定,导致生成的small都是Croot类的small值,而非其派生类的值。

应该在基类改一下virtual void showsmall() { cout<<"small="<<small<<endl; }就清晰了。
同时Cder2(int n=0) { small=n; },默认使用的是Cder2(int n=0) : Croot() { small=n; }。
温馨提示:答案为网友推荐,仅供参考
相似回答