我正在尝试几个有关继承的程序,结果发现以下内容引起了错误,但我并不真正了解其原理。
#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() {}
我希望派生类可以访问基类的公共或受保护的数据成员和成员函数。
但是它没有按照我的想法工作,有人可以帮我照亮我的概念吗?
没有比您已经发现的更多的东西了。派生实例可以访问其受保护成员以及其他派生实例的成员,但不能访问基类实例的成员。为什么?因为那就是protected
定义的方式。
有关更多详细信息,请参考cppreference(强调我的观点):
Base类的受保护成员只能访问
1)由基地的成员和朋友
2)由从Base派生的任何类的成员和朋友(直到C ++ 17),但仅当对从Base(包括此)派生的类型的对象进行操作时
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句