C++继承方式

从基类派生出派生类,派生类继承基类的继承方式有三种:public、protected 和 private。在未指定的情况下编译器会默认继承方式为 protected 或 private 方式。

1) public继承方式

  • 基类中所有 public 成员在派生类中为 public 属性;
  • 基类中所有 protected 成员在派生类中为 protected 属性;
  • 基类中所有 private 成员在派生类中不可访问。

具体示例可以参考上一节中的例1,在此就不再重新举例了。

2) protected继承方式

  • 基类中的所有 public 成员在派生类中为 protected 属性;
  • 基类中的所有 protected 成员在派生类中为 protected 属性;
  • 基类中的所有 private 成员在派生类中仍然不可访问。

【例 1】
enum language{cpp, java, python,javascript, php, ruby};

class book
{
public:
    void setprice(double a);
    double getprice()const;
    void settitle(char* a);
    char * gettitle()const;
    void display();
private:
    double price;
    char * title;
};

class codingbook: protected book
{
public :
    void setlang(language lang);
    language getlang(){return lang;}
private:
    language lang;
};

本类同样使用上一节中的示例,此时继承方式改为了 protected 继承,我们再来分析一下 codingbook 中类成员的属性问题,具体见下表。

codingbook类成员 成员属性 来源
price 不可访问 继承自 book 类
title 不可访问 继承自 book 类
lang private codingbook 新增
setprice protected 继承自 book 类
settitle protected 继承自 book 类
getprice protected 继承自 book 类
gettitle protected 继承自 book 类
dispaly protected 继承自 book 类
setlang public codingbook 新增
getlang public codingbook 新增

3) private继承方式

  • 基类中的所有 public 成员在派生类中均为 private 属性;
  • 基类中的所有 protected 成员在派生类中均为 private 属性;
  • 基类中的所有 private 成员在派生类中均不可访问。

【例 2】
enum language{cpp, java, python,javascript, php, ruby};

class book
{
public:
    void setprice(double a);
    double getprice()const;
    void settitle(char* a);
    char * gettitle()const;
    void display();
private:
    double price;
    char * title;
};

class codingbook: private book
{
public :
    void setlang(language lang);
    language getlang(){return lang;}
private:
    language lang;
};
同样,我们来分析一下本例中的 codingbook 类中所有成员的成员属性,具体见下表。

codingbook类成员 成员属性 来源
price 不可访问 继承自 book 类
title 不可访问 继承自 book 类
lang private codingbook 新增
setprice private 继承自 book 类
settitle private 继承自 book 类
getprice private 继承自 book 类
gettitle private 继承自 book 类
dispaly private 继承自 book 类
setlang public codingbook 新增
getlang public codingbook 新增