【面向对象程序设计常见面试题】虚基类的几点说明(xx)
2014-03-30 21:04
288 查看
1、如果虚基类中定义有带形参的构造函数,并且没有定义默认形式的构造函数,则整个继承结构,所有直接或间接
的派生类都必须在构造函数的成员初始化列表中列出对虚基类构造函数的调用,以初始化在虚基类中定义的数据成员
2、建立一个对象时,如果这个对象中含有从虚基类继承的成员,则虚基类的成员是由最远派生类的构造函数通过调
用虚基类的构造函数进行初始化的。该派生类的其他基类对虚基类构造函数的调用可以自动忽略
3、如果同一层次中同时包含虚基类和非虚基类,应该先调用虚基类的构造函数,再调用非虚基类的构造函数,最后
调用派生类的构造函数
4、对于多个虚基类,构造函数的执行顺序是先左后右,自上而下
5、对于非虚基类,构造函数的执行顺序是先左后右,自上而下
6、如果虚基类由非虚基类派生,则仍然先调用基类构造函数,再调用派生类的构造函数
Base的构造函数只执行一次,当类Derived的构造函数调用虚基类Base的构造函数之后,类Base1和类Base2对类
Base的构造函数的调用被忽略。这是初始化虚基类和初始化非虚基类的区别
的派生类都必须在构造函数的成员初始化列表中列出对虚基类构造函数的调用,以初始化在虚基类中定义的数据成员
2、建立一个对象时,如果这个对象中含有从虚基类继承的成员,则虚基类的成员是由最远派生类的构造函数通过调
用虚基类的构造函数进行初始化的。该派生类的其他基类对虚基类构造函数的调用可以自动忽略
3、如果同一层次中同时包含虚基类和非虚基类,应该先调用虚基类的构造函数,再调用非虚基类的构造函数,最后
调用派生类的构造函数
class X:public Y,virtual public z{ }; X one
4、对于多个虚基类,构造函数的执行顺序是先左后右,自上而下
5、对于非虚基类,构造函数的执行顺序是先左后右,自上而下
6、如果虚基类由非虚基类派生,则仍然先调用基类构造函数,再调用派生类的构造函数
#include <iostream> using namespace std; class Base { public: Base(int sa){ a = sa; cout<<"Base"<<endl; } protected: int a; }; class Base1:virtual public Base { public: Base1(int sa,int sb):Base(sa) { b = sb; cout<<"Base1"<<endl; } private: int b; }; class Base2: virtual public Base { public: Base2(int sa ,int sc):Base(sa) { c = sc; cout<<"Base2"<<endl; } private: int c; }; class Derived:public Base1,public Base2 { public: Derived(int sa,int sb,int sc,int sd):Base(sa),Base1(sa,sb),Base2(sa,sc){ d = d; cout<<"Derived"<<endl; } private: int d; }; int main(){ Derived obj(2,4,6,8); return 0; }
Base的构造函数只执行一次,当类Derived的构造函数调用虚基类Base的构造函数之后,类Base1和类Base2对类
Base的构造函数的调用被忽略。这是初始化虚基类和初始化非虚基类的区别
相关文章推荐
- 【面向对象程序设计常见面试题】派生中构造函数的几点说明(xx)
- 【面向对象程序设计常见面试题】虚函数的定义的几点说明(已阅)
- 【面向对象常见面试题】访问声明的几点说明(xx)
- 【面向对象程序设计常见面试题】派生新类的声明(xx)
- 【面向对象程序设计常见面试题】赋值兼容(xx)
- 【面向对象程序设计常见面试题】赋值运算符和拷贝构造函数的区别与联系?(3)
- 【面向对象程序设计常见面试题】类的声明和实现的分开的好处?
- 【面向对象程序设计常见面试题】友元关系有什么特性?(22)
- 【面向对象程序设计常见面试题】什么叫静态关联,什么叫动态关联
- 【面向对象程序设计常见面试题】对对象成员进行初始化的次序是什么?(11)
- 【面向对象程序设计常见面试题】什么叫智能指针?
- 【面向对象程序设计常见面试题】类和对象之间的关系是什么?(11)
- 【面向对象程序设计常见面试题】对类的成员的访问属性有什么?(11)
- 【面向对象程序设计常见面试题】如何定义和实现一个类的成员函数为回调函数?
- 【面向对象程序设计常见面试题】虚函数是怎么实现的?(已阅)
- 【面向对象程序设计常见面试题】虚析构函数(已阅)
- 【面向对象程序设计常见面试题】判断题
- 【面向对象程序设计常见面试题】函数模板与类模板有什么区别?(44)
- 【面向对象程序设计常见面试题】多继承与虚函数之间的关系(已阅)
- 【面向对象程序设计常见面试题】运算符重载的三种方式?(7)