C++考前复习——继承构造的顺序
2015-05-09 11:49
211 查看
根据书上所说,虚继承后由第二级派生类对底层的基类进行构造,而第一级派生类不对底层基类进行构造,所以需要加上base(i);
派生类构造时先对基类进行构造,所以是按照(base),(base1,base2),(mem1,mem2)的顺序构造的;
因为继承时public base2, public base1 base2在base1前面,所以先构造base2;
因为定义时base2 mem2;
base1 mem1;先定义的base2所以先构造base2;
#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;
};
int main()
{
derived ob(1, 2, 3, 4);
}
派生类构造时先对基类进行构造,所以是按照(base),(base1,base2),(mem1,mem2)的顺序构造的;
因为继承时public base2, public base1 base2在base1前面,所以先构造base2;
因为定义时base2 mem2;
base1 mem1;先定义的base2所以先构造base2;
#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;
};
int main()
{
derived ob(1, 2, 3, 4);
}
相关文章推荐
- C++继承体系下构造的执行顺序
- c++多重继承的构造执行顺序
- C++学习笔记:3.3.4 继承和组合混搭情况下,构造和析构调用顺序
- 关于C++继承体系中类的构造与析构的顺序【转贴】
- C++ - 虚继承(virtual inheritance)的构造(construct)和析构(destruct)顺序
- C++ - 虚继承(virtual inheritance)的构造(construct)和析构(destruct)顺序
- 两个小程序看C++继承和组合的构造顺序
- [C++]多个对象构造、析构、构造和析构的顺序
- 多继承的构造顺序
- 虚继承 构造顺序
- C++复习(继承,运算符)
- C++复习之类继承的控制访问
- 子类虚函数C++ 继承中子类与父类虚函数入栈顺序 及父类私有虚函数的调用方式
- 子类继承父类后,代码块和构造方法的运行先后的顺序
- 【Java基础】继承中的代码块和构造方法的执行顺序探索
- C++程序:C++ 构造、析构的顺序
- C++对象模型——"无继承"情况下的对象构造(第五章)
- C++ 构造与析构的执行顺序
- C++继承的构造和析构
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容