知识点1 继续复习类的封装
知识点2 继承和派生的概述(了解)
继承的优点:减少代码的冗余 提高代码的重用性
知识点3 继承的格式
//派生类定义格式
class 派生类名:继承方式 基类名
{
//派生类新增的数据成员和成员函数
};
class 子类:继承方式 父类名
{
//子类新增的数据成员和成员函数
};
按继承方式分类:
public:公有继承(重要)
private:私有继承
protected:保护继承
按父类个数分类:
单继承:指每个派生类只继承了一个基类的特征(一个父类派生出一个子类)
多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征(多个父类派生出一个子类)
注意事项:
子类继承父类,子类拥有父类中的全部成员变量和成员方法(除了构造和析构之外的成员党法),但是在子类中,继承的成员并不一定能直接访问,不同的继承方式会导致不同的访问权限。
案例1 公有继承public
#include <iostream>
using namespace std;
//设置一个父类
class Base
{
public:
int a;
private:
int b;
protected:
int c;
};
//设置一个子类
class Son:public Base
{
public:
//父类中的public数据在子类也是public
//父类中的private数据在子类中不可见
//父类中的protected数据在子类中是protected
//子类的内部
void showSon()
{
//b = 200;不能直接访问
c = 300;//在子类内部可以访问
}
};
int main()
{
//子类的外部
Son ob;
ob.a = 100;
cout << "父类中的public数据a = " << ob.a << endl;
//ob.b = 200;在子类外访问不了
//ob.c = 200;在类外访问不了
return 0;
}
案例2 保护继承protected
class Son1:protected Base
{
public:
//父类中的public数据在子类是protected
//父类中的private数据在子类中不可见
//父类中的protected数据在子类中是protected
//子类的内部
void showbase()
{
a = 100;//子类的内部可以访问
//b = 200;不能直接访问
c = 300;//子类的内部可以访问
}
};
int main()
{
Son1 ob;
//ob.a;子类外不可访问
//ob.b;子类外不可访问
//ob.c;子类外不可访问
return 0;
}
案例3 私有继承private
class Son2:private Base
{
public:
//父类中的public数据在子类是private
//父类中的private数据在子类中不可见
//父类中的protected数据在子类中是private
//子类的内部
void showbase()
{
a = 100;//子类的内部可以访问
//b = 200;不能直接访问
c = 300;//子类的内部可以访问
}
};
int main()
{
Son2 ob;
//ob.a;子类外不可访问
//ob.b;子类外不可访问
//ob.c;子类外不可访问
return 0;
}
总结
不管什么继承方式,父类中的私有数据在子类中不可见(可以通过调用父类中公有方法访问)