【发布时间】:2019-08-27 05:00:40
【问题描述】:
我正在尝试几个关于继承的程序,结果发现以下导致错误,但我真的不知道原因。
#include <iostream>
using namespace std;
class Base {
protected:
int x = 0;
};
class Derived: public Base {
// OK: access protected member via this
void g() { cout<<x; }
// OK: access protected member of other Derived
void h(Derived& d) { cout<<d.x; }
// FAIL: access Base class's protected member, why?
void f(Base& b) { cout<<b.x; }
};
int main() {}
我希望派生类可以访问基类的公共或受保护数据成员和成员函数。
但是它并没有像我想的那样起作用,有人可以帮我阐明我的概念吗?
【问题讨论】:
-
“没用”怎么办?它编译了吗?如果没有,错误应该在您的问题中。
-
真的很抱歉描述不清楚,程序无法编译,我也不清楚背后的原理。
-
Accessing protected members in a derived class 可能重复 - 这是完全相同的问题。
-
它只是被 [class.protected] 中的标准明确禁止,并且有一个与您相同的示例。
-
@SeanTsai 没问题 - 我只是稍微重新排序了您的代码,以便更容易看出哪种情况失败。
标签: c++