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())。

posted @ 2016-03-07 10:25  jiu~  阅读(346)  评论(0编辑  收藏  举报