多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。
多继承的语法也很简单,将多个基类用逗号隔开即可。例如已声明了类A、类B和类C,那么可以这样来声明派生类D:class D: public A, private B, protected C{ //类D新增加的成员 }
D 是多继承形式的派生类,它以公有的方式继承 A 类,以私有的方式继承 B 类,以保护的方式继承 C 类。D 根据不同的继承方式获取 A、B、C 中的成员,确定它们在派生类中的访问权限。
多继承下的构造函数多继承形式下的构造函数和单继承形式基本相同,只是要在派生类的构造函数中调用多个基类的构造函数。以上面的 A、B、C、D 类为例,D 类构造函数的写法为:
D(形参列表): A(实参列表), B(实参列表), C(实参列表){ //其他 *** 作 }
基类构造函数的调用顺序和和它们在派生类构造函数中出现的顺序无关,而是和声明派生类时基类出现的顺序相同。仍然以上面的 A、B、C、D 类为例,即使将 D 类构造函数写作下面的形式:
D(形参列表): B(实参列表), C(实参列表), A(实参列表){ //其他 *** 作 }
那么也是先调用 A 类的构造函数,再调用 B 类构造函数,最后调用 C 类构造函数。
下面是一个多继承的实例:
#includeusing namespace std; //基类 class baseA{ public: baseA(int a,int b); ~baseA(); protected: int m_a; int m_b; }; baseA::baseA(int a,int b):m_a(a),m_b(b){ cout<<"baseA constructor"< 从运行结果中还可以发现,多继承形式下析构函数的执行顺序和构造函数的执行顺序相反。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)