zoukankan      html  css  js  c++  java
  • 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())。

  • 相关阅读:
    ActiveMQ 5.x 消息队列
    Spring Boot 整合 ElasticSearch 框架
    Spring Boot 整合 Logback 日志框架
    Spring Boot 整合定时任务和异步任务处理
    Spring 中使用 Java 5.0 Executor
    二级指针三种内存模型综合训练
    08-图8 How Long Does It Take (25 分)
    08-图9 关键活动 (30 分)
    08-图7 公路村村通 (30 分)
    C函数之index、strtoul
  • 原文地址:https://www.cnblogs.com/jiu0821/p/5249629.html
Copyright © 2011-2022 走看看