一、类的继承
1、共性与特性
共性 表达不同类型事物之间共同的属性和行为
个性 用于刻画每种事物特有的属性和行为
2、共性表示为父类(基类),个性表示为子类(派生类)
子类继承自父类
基类派生出子类
二、继承的基本语法
1、继承表
一个子类可以同时继承 零~多个 父类,每个父类的继承方式可以相同也可以不同
class 子类:继承方式1 父类1,继承方式2 父类2,继承方式3 父类3,...
{
}
2、继承方式
public 公有继承:
父类的特性可以通过子类向外扩展
private 私有继承:
父类的特性只能为子类所有
protected 保护继承:
父类的特性只能在继承链内扩展
三、继承的基本特点
1、公共特点(所有继承都有的特点)
子类对象可以当作父类对象使用,子类对象与父类对象没有本质上的区别
子类的逻辑空间小于父类,但它的物理空间要大于等于父类
子类对象 IS A 父类对象
2、向上和向下转换(造型)
从子类到父类:子类的指针或引用可以隐式的转换成父类的指针或引用,这是一种缩小型的转换,对于编译器类说是安全
从父类到子类:父类的指针或引用不可以转换成父类的指针或引用,这是一种扩大型的转换,在编译器看来是危险的
编译器仅仅是检查指针或引用的数据类型,而对实际引用的目标对象不关心(构成多态的基础)
类型一致:父类的指针或引用实际的目标类型是否需要转换成实际的指正或引用由程序自己决定
3、子类会继承父类的所有成员(公开、私有、保护)
4、子类会隐藏父类的同名成员
1、可以通过域限定符 父类::隐藏成员 进行访问父类中的隐藏成员
2、可以使用指针的指针或引用来指向子类对象,然后访问父类中的隐藏成员
5、虽然子类继承所有父类中的成员,但不能访问父类中的私有成员。
简单演示不同类别
#include <iostream>
using namespace std;
class A
{
public:
A(void)
{
a=111;
b=222;
c=333;
}
public:
int a ;
private:
int b ;
protected:
int c ;
};
class B:private A//更改继承方式-public/private/protected
{
public:
void show(void)
{
cout << a.a << endl;
}
friend const visit(B& b);
};
void visit(B& b)
{
cout << b.a
}
int main()
{
B b;
A& a =b;
b.show();
cout << a.c << endl;
}