面向对象程序设计有4个主要特点:(抽象)、封装、继承和多态性。
单继承语法
说明
1、子类拥有父类的所有成员变量和成员函数
2、子类可以拥有父类没有的方法和属性
3、子类就是一种特殊的父类
4、子类对象可以当作父类对象使用
派生类的访问控制
public继承:
父类成员在子类中保持原有访问级别
private继承:
父类成员在子类中变为private成员
protected继承:
父类中public成员会变成protected
父类中protected成员仍然为protected
父类中private成员仍然为private
C++中的继承方式(public、private、protected)会影响子类的对外访问属性
判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部、外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)
类型兼容规则:
父类的指针或者引用可以子类对象;
Base *pbase=NULL;
pbase = &derived;
pbase->outputBase();
父类指针(引用)做函数参数
void display(Base *pbase){
if(NULL == pbase) return;
pbase->outputBase();
}
display(&base);
display(&derived);
//输出结果都是调用父类的成员函数
可以让子类对象初始化父类(拷贝构造函数);
继承的对象模型
继承中的构造和析构
1个对象的初始化
2个对象的初始化(组合)
n个对象的初始化(继承)
调用顺序:先调用父类的构造,然后子类的构造
析构顺序相反。
继承和组合混搭
调用顺序: 先构造父类,再构造成员变量(组合类)、最后构造自己
先析构自己,在析构成员变量、最后析构父类
//先构造的对象,后释放
当子类成员变量与父类成员变量同名时
当派生类与基类有同名成员时,派生类中的成员将屏蔽基类中的同名成员。
同名成员变量和成员函数通过作用域分辨符进行区分
继承中的static变量
1、在继承体系中依然共享一份内存。
2、继承之后的访问权限与普通变量的访问控制权限一致。
问题:
常成员函数能不能修改static变量?
能。
能否定义 static 常成员函数?
不能。