关于c ++继承的困惑

时间:2014-02-09 19:46:44

标签: 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

3 个答案:

答案 0 :(得分:3)

私有继承意味着所有基本成员都成为派生类的私有 。派生类本身仍然可以访问成员,但是没有其他派生类可以。

答案 1 :(得分:3)

派生类型可以访问基类的publicprotected成员。这与继承类型无关。但如果继承是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成员。