1、继承中的类作用域,派生类的作用域嵌套在基类中,出现在派生类的调用中的名字,首先在派生类中解析,然后在直接基类中,然后在上一个基类中...;
2、注意不能使用一个已经转换为基类的派生类指针,来访问派生类的成员;
3、派生类的同名成员将隐藏同名的基类成员,最好不要这样做,但是依然可以通过作用域运算符来访问基类的成员;
4、名字查找优先于类型检查;所以声明在内层的同名函数不会重载外层作用域的函数,派生类中的函数也不会重载基类的成员,而是直接隐藏的基类的函数;
5、查找完成后,匹配不上则会报错;
6、综上,虚函数必须要有一致的形参列表,如果不一致,则会覆盖;
7、覆盖的重载函数,如果派生类要访问全部重载函数,要么全部覆盖,要么一个也别覆盖;如果只想覆盖几个,则可以使用using声明,using声明可以指定一个函数名字,而不写形参列表,这时一条基类成员函数的using声明就可以把该函数的所有重载实例添加到派生类作用域中去;
8、基类一定要有虚的析构函数,为了执行动态绑定;
9、虚的析构函数将会阻止编译器合成移动构造函数和移动赋值运算符;
10、拷贝控制操作,在继承体系中,注意每个类的这些函数处理自己的数据之后,要调用基类的这些函数来处理基类的数据,默认合成的版本也是如此;
11、一个类只负责初始化它的直接基类,所以也只继承它直接基类的构造函数;
12、当使用容器存放继承体系的对象的时候,不应该直接存放对象,因为无法存不同类型的对象,所以要存指针,最好是智能指针;
13、面向对象编程无法直接使用对象,要使用指针和引用、没有指针和引用就无法OO;
版权声明:本文为yangfeng2014原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。