c++ 中基类中受保护字段的问题

发布于 2024-08-13 14:30:56 字数 258 浏览 7 评论 0原文

我有一个基类,例如 BassClass,其中包含一些字段(我将其设置为受保护的)和一些纯虚函数。然后是派生类,例如 DerivedClass,例如 class DerivedClass : public BassClass。 DerivedClass 不应该继承 BassClass 的受保护字段吗?当我尝试编译 DerivedClass 时,编译器抱怨 DerivedClass 没有任何这些字段,这里出了什么问题? 谢谢

I have a base class, say BassClass, with some fields, which I made them protected, and some pure virtual functions. Then the derived class, say DerivedClass, like class DerivedClass : public BassClass. Shouldn't DerivedClass inherit the protected fields from BassClass? When I tried to compile the DerivedClass, the compiler complains that DerivedClass does NOT have any of those fields, what is wrong here?
thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

撧情箌佬 2024-08-20 14:30:56

如果 BassClass (原文如此)和 DerivedClass 是模板,并且您想要从 DerivedClass 访问的 BassClass 成员不是' t 指定为从属名称,它将不可见。

例如,

template <typename T> class BaseClass {
protected: 
    int value;
};

template <typename T> class DerivedClass : public BaseClass<T> {
public:
    int get_value() {return value;} // ERROR: value is not a dependent name
};

要获得访问权限,您需要提供更多信息。例如,您可以完全指定成员的名称:

    int get_value() {return BaseClass<T>::value;}

或者您可以明确指出您引用的是类成员:

    int get_value() {return this->value;}

If BassClass (sic) and DerivedClass are templates, and the BassClass member you want to access from DerivedClass isn't specified as a dependent name, it will not be visible.

E.g.

template <typename T> class BaseClass {
protected: 
    int value;
};

template <typename T> class DerivedClass : public BaseClass<T> {
public:
    int get_value() {return value;} // ERROR: value is not a dependent name
};

To gain access you need to give more information. For example, you might fully specify the member's name:

    int get_value() {return BaseClass<T>::value;}

Or you might make it explicit that you're referring to a class member:

    int get_value() {return this->value;}
清眉祭 2024-08-20 14:30:56

这有效:

#include <iostream>

struct Base {
virtual void print () const = 0;
protected:
int val;
};

struct Derived : Base {
void print () { std::cout << "Bases's val: " << val << std::endl; }
};

This works:

#include <iostream>

struct Base {
virtual void print () const = 0;
protected:
int val;
};

struct Derived : Base {
void print () { std::cout << "Bases's val: " << val << std::endl; }
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文