我在理解以下代码时遇到一些困难。我有3个类:A,B和C。A具有int类型的私有(private)x。 B继承了A及其所有内容。 C从B继承但受到保护。这意味着X和Y在类C中都不可访问。而且,get_x()和get_y()在类C中也 protected 。因此C应该能够访问get_x()和get_y()函数,但不能访问x和y?

#include<iostream>
using namespace std;

class A
{
int x;
public: A(int i):x(i){}
int get_x(){ return x; }
};

class B: public A
{
int y;
public: B(int i,int j):y(i),A(j){}
int get_y(){ return y; } };

class C: protected B
{
int z;
public: C(int i,int j,int k):z(i),B(j,k){}
int get_z(){ return z; }
};

int main()
{
C c(1,2,3);
cout<<c.get_x();
cout<<c.get_y();
cout<<c.get_z();
return 0;
}

最佳答案

似乎您了解“ protected 继承”权利,但误解了“ protected 成员和方法”。

从类外部无法访问 protected 方法。

含义

C c(1,2,3);
cout << c.get_x(); // THIS DOES NOT WORK.

您可以在其中访问get_x()的是C类。
class C: protected B
{
  int z;
  public: C(int i,int j,int k):z(i),B(j,k){}
  int get_z(){ return z; }
  int get_x_from_c() { return this->get_x(); } // THIS IS ALLOWED.
};

09-27 12:27