C++程序有关问题,谁帮小弟我详细解释一下下面的C++程序的运行结果为什么是14302012 ?
C++程序问题,哪位高手帮我详细解释一下下面的C++程序的运行结果为什么是14302012 ??
#include <iostream>
using namespace std;
class Base
{
public:
Base(int i) {
cout << i;
}
~Base () { }
};
class Base1: virtual public Base
{
public:
Base1(int i, int j=0) : Base(j)
{
cout << i;
}
~Base1() {}
};
class Base2: virtual public Base
{
public:
Base2(int i, int j=0) : Base(j)
{
cout << i;
}
~Base2() {}
};
class Derived : public Base2, public Base1
{
public:
Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c),
Base2(d), Base(a)
{
cout << b;
}
private:
Base2 mem2;
Base1 mem1;
};
void main()
{
Derived objD (1, 2, 3, 4);
}
------解决方案--------------------
1 //首先调用base的构造函数,所以输出1
4 //然后调用base2的构造函数,输出4
3 //然后调用base3的,输出3
0 //mem2(b)这个过程需要调用base2的构造函数,所以又需要先调用base的构造函数输出0
2
0 //同理
1
2
#include <iostream>
using namespace std;
class Base
{
public:
Base(int i) {
cout << i;
}
~Base () { }
};
class Base1: virtual public Base
{
public:
Base1(int i, int j=0) : Base(j)
{
cout << i;
}
~Base1() {}
};
class Base2: virtual public Base
{
public:
Base2(int i, int j=0) : Base(j)
{
cout << i;
}
~Base2() {}
};
class Derived : public Base2, public Base1
{
public:
Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c),
Base2(d), Base(a)
{
cout << b;
}
private:
Base2 mem2;
Base1 mem1;
};
void main()
{
Derived objD (1, 2, 3, 4);
}
------解决方案--------------------
1 //首先调用base的构造函数,所以输出1
4 //然后调用base2的构造函数,输出4
3 //然后调用base3的,输出3
0 //mem2(b)这个过程需要调用base2的构造函数,所以又需要先调用base的构造函数输出0
2
0 //同理
1
2