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 = 0,int y = 0)
    {

    }

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

int main()
{
    return 0;
}

多重继承

  • 优点

    • 能继承更多
  • 缺点

    • 由于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

    • 多个派生类共享一份基类
    • 创建对象时, 基类的对象只会创建一次
  • 语法

    class 子类名:virtual public 虚基类名{ //…}
    • 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;}
};
---------------------------------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值