【C++】继承①
继承的写法
类标识 类名 : 继承方式 基类名称
继承的本质:代码复用
例如:class Student : public People (Student是子类/派生类,People是父类/基类,Student以public方式继承了People类)
#include<iostream>
#include<string>
using namespace std;
class People//父类
{
public:
People(string name , bool sex)
{
mname = name;
msex = sex;
}
protected:
string mname;
bool msex;
};
class Student : public People//子类
{
private:
int mid;
};
以上代码可以用下面这个图来表示:
继承了什么?
1、除构造和析构函数以外的所有成员
2、继承了作用域
默认的继承方式:(访问限定符:private)
派生类的内存布局
class A
{
protected:
int ma;
public:
A(int a = 0):ma(a){}
};
class B:public A
{
public:
B(int b):mb(b){}
private:
int mb;
};
派生类对象构造/析构方式和顺序
1、子类对象的构造
①系统调用基类的构造
②系统调用子类的构造
2、子类对象的析构
①系统调用子类的析构
②系统调用基类的析构
原因:在栈上,先构造的后析构,顺序相反
基类中不同访问限定符下的成员以不同继承方式继承后在子类中的访问限定
public:任意位置访问
protected:本类类中和子类类中访问
private:本类类中访问
类和类的组合关系
1、组合 a part of has_a
2、继承 a kind of is_a
3、代理
同名函数的关系
1、重载(重定义)overload
①同名
②不同参数
③同作用域
2、隐藏 overhide
派生类中隐藏了基类中所有的同名函数
①同名
②继承关系下的不同作用域
3、覆盖(重写) override
基类/派生类指针/引用的相互指向/引用
允许基类指针或引用 指向或引用派生类对象,反之,不允许。