作为C++的三大特性之一的继承有着举足轻重的地位,下面将尽本人最大努力通俗地阐述清楚继承这一特性。

正如本人名字所示,渣渣一枚,如有纰漏,还望包涵指正。

继承——顾名思义,要有所有者和继承者,这在C++里分别叫做基类(父类),派生类(子类);子辈继承父辈,子类继承父类。

父类往往抽象,在子类得到细化具体。例如人都有手有脚,但人里面又分男女,男的有小JJ,女的就没有。一个父类可能会有多个子类,但是为了免去书写那些从父类得到的相同的属性或方法的麻烦(少敲代码),便有了继承。使用继承,你就不用自己把父类的代码搬过来了。当然,我们一般也不会是照搬的,往往会进行一下处理。接下来便是继承方式:public、private、protected.

正如上面所说,我们往往不是照搬,要处理一下。在这之前先说一下子类单继承的声明:

class <子类名>:<继承类型> <父类名>

{...

};

继承方式如下表(从网上偷来的)所示:

C++之继承(一)

首先,无论何种继承方式,父类的私有成员(private)在子类虽然存在,但不可访问。其次,pubilc继承中,父类的public、protected在子类依然是public、protected;protected继承中,父类的public、protected在子类中都变成protected;private继承中,父类的public、protected在子类中都变成private。

嗯,,,看来继承还是挺方便的,但是,要说的是,继承是不会继承父类的构造函数、析构函数的,至于怎么处理,请移步C++继承(二)。

但是,如果子类中定义了和父类同名的成员会怎么样?C++会隐藏子类中的那些和子类相同的父类的成员,也就是说,当你调用成员函数或变量时,会默认调用子类自己的。如果在这种重名情况下你要非要调用父类的成员的话,就要使用域解析符::, 比如在子类中调用Base类中的getx()函数就要写成Base::getx()。

还有,上面提到的继承只是一个子类继承一个父类,但是如果一个子类继承多个父类,或者一个子类继承多个来自相同父类的父类,情况又会怎么样呢?

首先说多继承,多继承的声明类似单继承,

class <子类名>:<继承类型1> <父类1名>,<继承类型2> <父类2名>,...{

...

};

多继承中只是将不同的父类以及继承类型用逗号隔开。

但是当当发生下图所示(先忽略‘虚继承’这个词)的继承关系时:

C++之继承(一)

当子类从不同途径继承同一基类时,子类中会存在多份拷贝。这将浪费存储空间而且存在二义性问题。所以为了解决这些问题,便有了“虚继承”,关于虚继承,请移步C++继承(三)。

相关文章:

  • 2021-06-13
  • 2020-03-25
  • 2021-04-13
  • 2021-05-03
  • 2021-11-06
  • 2019-09-27
  • 2021-04-08
  • 2021-11-04
猜你喜欢
  • 2021-05-31
  • 2021-08-26
  • 2021-03-31
  • 2021-09-10
  • 2019-03-20
  • 2021-12-26
  • 2021-11-10
  • 2021-05-18
相关资源
相似解决方案