天天看点

C++继承及多重继承C++继承 及多重继承 虚基类

C++继承 及多重继承 虚基类

C++继承

  1. C++类的元素默认都是私有的
  2. C++不继承构造和析构函数

基础语法

class class_name: InheritanceMode base_class_name
{
                //member declaration
}   
           
  • C++访问权限
    • public
    • 类外元素都能访问public元素
    • private
    • 子类不能访问父类private元素
    • 但是还是继承private元素
    • protected
    • 子类可以访问父类protected元素
  • InheritanceMode(继承方式)
    • public(一般)
    • 父类中的元素继承到子类后,子类继承到的元素的访问权限与父类相同
    • private
    • 无论父类中的元素是什么样的访问权限,子类继承到的元素统统变成private
    • protected
    • 父类元素访问权限如果为public或protected,子类继承到的元素的访问权限为protected
    • 父类元素访问权限如果为private,子类继承到的元素的访问权限为private

创建派生类对象

  1. 先由基类的构造函数创建派生类包含的基类对象,并初始化
  2. 在由成员对象的构造函数创建成员对象,并初始化
  3. 最后执行本类的构造函数创建本对象,并初始化

代码

// polymorphism.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;
class Point {
protected :
    int x;
    int y;
public :
    Point  (int x = ,int y = )
    {

    }

};
class SpacePoint : public Point {
protected :
    int z;
public :
    SpacePoint (int px,int py ,int pz = ): Point (px,py)
    {
        z = pz;
    }
    void showPoint(){
        cout << x << endl;
    }
};

int main()
{
    return ;
}

           

多重继承

  • 优点
    • 能继承更多
  • 缺点
    • 由于c++继承会把除了构造函数和析构函数都继承下来, 若父类们有相同声明的函数, 则可能导致调用该函数时的二义性
class class_name: InheritanceMode base_class_name1,InheritanceMode base_class_name2 
{
                //member declaration
}   
           

Virtual Base Classes虚基类

  • 特点
    Multiple derived class share one copy of base class
    • 多个派生类共享一份基类
    • 创建对象时, 基类的对象只会创建一次
  • 语法
    • virtual 关键字要在所有的子类继承中都声明
      • 未添加virtual 的子类会自己再创建 一个基类(就是虚基类那个类)
  • Virtual Inheritance (虚继承) 对象创建顺序
    1. 创建虚基类对象
    2. 创建基类对象
    3. 创建对象成员
    4. 创建对象本身
  • 举例说明
#include <iostream.h>
class A
{
public:
  A(){cout<<"A's con."<<endl;}
~A(){cout<<"A's des."<<endl;}
};
class B
{
public:
    B(){cout<<"B's con."<<endl;}
   ~B(){cout<<"B's des."<<endl;}
};
---------------------------------------------------
           

继续阅读