1 面向对象程序设计三个基本概念:数据抽象、继承和动态绑定;
2 在C++语言中,当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定;派生类经常(但 不总是)覆盖它继承的虚函数。如果派生类没有覆盖其基类中的某个虚函数,则该虚函数的行为类似于其他的普通函数;
3 派生类实现:
Quote item; //基类对象
Bulk_quote bulk; //派生类对象
Quote *p = &item; //p指向quote对象
p = &bulk; //p指向bulk的Quote对象
Quote &r = bulk; //r绑定到bulk的Quote对象
4 防止继承的发生:
C++11新标准提供了一种防止继承发生的方法,即在类名后跟一个final;
不存在从基类向派生类的隐式类型转换;
5 override关键字说明派生类中的虚函数,如果使用override标记了某个函数,但该函数并没有覆盖已经存在的虚函数,此时编译器将报错;
6 抽象基类:我们通过在函数体的位置书写=0可以将一个虚函数说明为纯虚函数,其中,=0只能出现在类内部的虚函数声明语句处;含有纯虚函数的类是抽象基类;
7 访问控制与继承:
受保护的成员对于类的用户来说是不可访问的;
和公有成员类似,受保护的成员对于派生类的成员和友元来说是可访问的;
派生类的成员或友元只能通过派生类对象来访问基类的受保护成员。派生类对于一个基类对象中的受保护成员没有任何访问特权;
派生访问说明符对于派生类的成员能否访问其直接基类的成员没什么影响;
派生访问说明符的目的是控制派生类用户对于基类成员的访问权限;
派生访问说明符还可以控制继承自派生类的新类的访问权限;
8 友元:友元关系同样不能被继承;基类的友元在访问派生类成员时不具有特殊性;
9 如果派生类的成员与基类的某个成员同名,则派生类将在其作用域内隐藏该基类成员。即使派生类成员和基类成员的形参列表不一致,基类成员仍然会被隐藏掉;
10 如果基类的析构函数不是虚函数,则delete一个指向派生类对象的基类指针将产生未定义行为;
11 派生类只能为那些它可以访问的名字提供using声明;
12 派生类也能重用定义在其直接基类或间接基类中的名字,此时定义在内层作用域(即派生类)的名字将隐藏定义在外层作用域(基类)的名字;
13 如果基类的析构函数不是虚函数,则delete一个指向派生类对象的基类指针将产生未定义的行为;