使用继承时,我从一个说
的教程中读到相反,如果指定了最严格的访问级别(私有),则所有基类成员都将作为私有继承,因此无法从派生类访问。
所以我测试下面的代码,但派生类仍然可以访问基类的成员。
为什么?
#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
答案 0 :(得分:3)
私有继承意味着所有基本成员都成为派生类的私有 。派生类本身仍然可以访问成员,但是没有其他派生类可以。
答案 1 :(得分:3)
派生类型可以访问基类的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
}
答案 2 :(得分:1)
根据C ++标准
如果一个类被声明为另一个类的基类使用 私人访问说明符,公共和受保护的成员 基类可以作为派生类的私有成员访问。
因此,在您的示例中,基类的受保护数据成员
protected:
int width, height;
可作为派生类的私有成员访问,派生类的任何成员函数都可以访问其私有dara成员。