c++之继承与派生

Posted jiu__

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++之继承与派生相关的知识,希望对你有一定的参考价值。

再来回顾下继承派生的语法。

 

继承方式显示有三种(public, protected, privatez),隐式默认private。所谓继承方式,是指派生类对基类成员的访问权限控制。

派生类构造函数定义的一般格式如下:

派生类名(参数总表):基类名1(参数表1),...,基类名m(参数表m),
       成员对象名1(成员对象参数表1),...,成员对象名n(成员对象参数表n)
{
    派生类新增成员的初始化;
}

构造函数调用次序:

1.调用基类构造函数
2.调用内嵌成员对象的构造函数
3.派生类自己的构造函数

示例:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A {
 5 private:
 6     int l1, l2;
 7 public:
 8     A(int l1 = 1, int l2 = 2) :l1(l1), l2(l2) {}
 9     void show() {
10         cout << "I‘m A." << endl;
11     }
12 };
13 class B {
14 private:
15     int lv1, l2;
16 public:
17     B(int lv1 = 1, int l2 = 2) :lv1(lv1), l2(l2) {}
18     void show() {
19         cout << "I‘m B." << endl;
20     }
21 };
22 class C: public A, public B{
23 private:
24     int lv1, lv2;
25     A ta;
26 public:
27     C(int r1, int r2, int r3, int r4, int r5, int r6, int r7, int r8) :A(r1, r2), B(r3, r4), ta(r5, r6) {
28         this->lv1 = r7;
29         this->lv2 = r8;
30     }
31     void show() {
32         cout << "I‘m C." << endl;
33         A::show();
34         B::show();
35     }
36 };
37 
38 int main() {
39     C tc(1, 2, 3, 4, 5, 6, 7, 8);
40     tc.show();
41     return 0;
42 }

假若多个基类拥有相同名称的成员x,而此时派生类去调用x,系统无法判断去调哪个基类的x,由此产生二义性。解决方式可以是成员名限定(eg:A::show();)或者成员重定义(同名覆盖,如上例的C::show())。

以上是关于c++之继承与派生的主要内容,如果未能解决你的问题,请参考以下文章

c++之继承与派生

C++的探索路12继承与派生之高级篇--派生类与赋值运算符及多重继承

C++的探索路11继承与派生之拓展篇--多形式派生以及派生类指针转换

C++之继承详解

C++从青铜到王者第十七篇:C++之继承

C++的探索路13继承与派生之练习篇(需重新学习)