gpt4 book ai didi

c++ - 基类对象中的 protected 方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:43 24 4
gpt4 key购买 nike

这个问题已经在这里有了答案:




7年前关闭。




Possible Duplicate:
cannot call base class protected functions?



在g++下进行编译:
class A
{
protected:
void f(){}
};

class B: public A
{
void g()
{
A a;
f(); //This works
a.f(); //Error: "A::F() is protected"
this->f(); //Works
((A*)this)->f(); //Same error
}
};

在为基类的非this对象调用 protected 函数时出错。编译器是GCC-但是相同的代码在其他GCC风格下也可以工作。请怎么回事-因为调用基类的 protected 方法是 verboten,除非通过 this

编辑:对不起,我不好。一切都是规范的;在另一个起作用的地方,我没有注意到一种友谊。请投票关闭。

最佳答案

您不必通过f访问this-您可以从B类型的任何对象访问它。例如,这将在B::g中起作用:

B b;
b.f();

C++ 03标准说(11.5):

When a friend or a member function of a derived class references a protected nonstatic member function or protected nonstatic data member of a base class, an access check applies in addition to those described earlier in clause 11. Except when forming a pointer to member (5.3.1), the access must be through a pointer to, reference to, or object of the derived class itself (or any class derived from that class)



因此,您可以从 f类型的对象或从 B派生的对象访问 B-包括但不限于 *this

C++ 11标准包含类似的限制(11.4)

关于c++ - 基类对象中的 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com