这两天看了c++继承相关的知识,现将要点总结如下:
为什么要继承?
为避免代码的重复,减少程序员的工作量,采用继承的方式将父类的数据成员和成员函数传给子类,使得子类不用定义就能拥有相关成员。
继承的方式:
公有继承public
保护继承protected
私有继承private
继承方式 | 基类的public成员 | 基类的protected成员 | 基类的private成员 |
---|---|---|---|
public | 变为public成员 | 变为protected成员 | 不可见 |
protected | 变为protected成员 | 变为protected成员 | 不可见 |
private | 变为private成员 | 变为private成员 | 不可见 |
什么是隐藏?
父类A和子类B中定义了同名的数据成员和成员函数时,子类B中的成员函数和数据成员会隐藏掉父类A中的成员。体现在当实例化B的对象后,该对象只能访问B中定义的成员函数,而A中的同名成员函数虽然继承到B中,但并不能被B的实例访问。若一定要通过B的实例访问A中同名成员,必须要加上父类的类名。
注意:父类和子类中的同名函数,即使各自含有不同的参数,子类的实例仍不能访问父类中与之同名的成员函数
多继承和多重继承
- 多继承:指一个子类C,既继承了父类A,又继承了父类B
- 多重继承:指子类C继承父类B,而B又继承父类A
- 菱形继承:继承与同一个类的两个类,又同时继承给下一个类
虚继承
虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A(菱形继承),因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:
class A
class B1:public virtual A;
class B2:public virtual A;
class D:public B1,public B2;
注意:虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就完全失去了存在的必要因为这样只会降低效率和占用更多的空间。
网友评论