C++继承 及多重继承 虚基类
C++继承
- C++类的元素默认都是私有的
- 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
创建派生类对象
- 先由基类的构造函数创建派生类包含的基类对象,并初始化
- 在由成员对象的构造函数创建成员对象,并初始化
- 最后执行本类的构造函数创建本对象,并初始化
代码
// 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 (虚继承) 对象创建顺序
- 创建虚基类对象
- 创建基类对象
- 创建对象成员
- 创建对象本身
- 举例说明
#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;}
};
---------------------------------------------------