先说结论,C++继承的默认方式:
1、对于类(class)来说默认是private
2、对于结构体(struct)来说默认是public
[ACCESS] 的默认值
类继承的基本语法:
class Rectangle: [ACCESS] Polygon { /* … */ }
冒号(:)后的[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别)的其中之一:
public,公共权限,三级(高)
protected,保护权限,二级
private,私有权限,一级(低)
[ACCESS]可以省略,对于class和struct,省略[ACCESS]的默认值是不一样的:
//以下两句等效(struct继承默认为public):
struct Rectangle: Polygon { /* ... */ }
struct Rectangle: public Polygon { /* ... */ }//以下两句等效(class继承默认为private):
class Rectangle: Polygon { /* ... */ }
class Rectangle: private Polygon { /* ... */ }
C++中常用的继承方式是public:
class Rectangle: public Polygon { /* ... */ } //public不能省略
代码验证
源代码,仔细看注释内容:
D:\YcjWork\CppTour>vim c2007.cpp
#include <iostream>
using namespace std;/*** 类继承的默认继承方式
*/// 基类
class Base {//protected:public:int a;
};//class Derived:Base{ //编译报错,error: 'int Base::a' is inaccessible within this context
//将上一行代码行前的注释删除,下一行代码注释掉,重新编译,即可查看到编译报错,说明默认继承不是public的。
class Derived:public Base{
};int main() {Derived d1;d1.a = 5;cout << d1.a << endl;return 0;
}
编译运行
D:\YcjWork\CppTour>gpp c2007D:\YcjWork\CppTour>g++ c2007.cpp -o c2007.exeD:\YcjWork\CppTour>c2007
5D:\YcjWork\CppTour>
运行截屏
(全文完)