C++的三种继承方式简述

C++对父类(也称基类)的继承有三种方式,分别为:public继承、protected继承、private继承。三种继承方式的不同在于继承之后子类的成员函数的“可继承性质”。

在说三种继承方式导致的子类成员函数可继承性质改变之前,先说一下在定义类的成员(包括函数和属性)的时候,在其前面添加public 或 protected 或 private对成员的可继承性的影响。其中,public类型的成员,在被继承的时候,能直接被子类使用,注意,如果成员属性是public的话,子类则可直接调用该成员属性。例如:

class A  // 父类
{
public:
      A();
      int size;
}
class B:public A   // 子类
{
public:
    change(const int x)
   {
      size = x;
    }
}

我这里写了个很简单的例子,其中父类A具有一个public类型的成员函数A()和一个public类型的成员属性size(int)。因为size是public的,所以在A的子类B中,B的成员函数可以直接调用size进行修改。因为size也是B的属性并且是可见也是可修改的。

如果成员是protected的话,表明只有这个类的继承类(子女)或者友好的类(friend)能购使用(直接调用)这些成员,否则不能使用。然后private成员的话固然是只有自己本身这个类可用,对其他任何类都不可见,也不可用,引用百度百科上的一段话概括这三者就是:

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

好,下面进入正题,就是三种对父类的不同继承方式对子类可继承方式的影响:

(1)public继承:

不改变父类成员的继承性质(public、protected、private),也就是说,父类public的成员在子类中仍然是public的,父类protected的成员在子类中仍然是protected的。

(2)protected继承:

父类public类型的成员在子类中变为protected性质,protected的被继承依然是protected的。

(3)private继承:

父类所有成员在被子类中都变成或者保留为private性质的。

嗯,就这么简单。

**********  2016-8-16补充  ***********

今天看到《Datastructure and algorithm analysis in java》一书里面的两句话,觉得挺值得理解下的:


原文地址:https://www.cnblogs.com/lvlang/p/10586517.html