关于 c++ 继承的困惑
A confusion about c++ inheritance
使用继承时,我从教程中读到说
相反,如果指定了最严格的访问级别(私有),则所有基类成员都将作为私有继承,因此无法从派生类访问。
所以我测试了以下代码,但派生类仍然可以访问基类的成员。
为什么?
#include <iostream>
using namespace std;
class Polygon {
protected:
int width, height;
public:
Polygon():width(10),height(10){}
};
class Rectangle: private Polygon {
public:
int area ()
{ return height; }
};
int main () {
Rectangle rect;
cout << rect.area() << 'n';
return 0;
}
输出为 10
派生类型可以访问基类的public
和protected
成员。这与继承的类型无关。但是,如果继承private
,则成员都private
派生类型中。
class Foo
{
public:
int i;
};
class Bar : private Foo
{
public:
void hello() {
++i; // OK, I can see Foo's public and protected members
}
};
int main()
{
Bar b;
b.hello(); // accesses i internally. OK
b.i; // Error, i is private in Bar
}
私有继承意味着所有基成员都成为派生类的私有成员。派生类本身仍然可以访问成员,但其他派生类不能。
根据C++标准
如果一个类声明为另一个类的基类,请使用 专用访问说明符,公共和受保护成员 基类可作为派生类 117 的私有成员进行访问。
因此,在您的示例中,基类的受保护数据成员
protected:
int width, height;
可作为派生类的私有成员访问,派生类的任何成员函数都可以访问其私有 DARA 成员。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 如何在QT Creator上将QWidget声明为继承类的对象