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

时间:2009-11-28 20:18:30

标签: c++ inheritance field protected

我有一个基类,比如BassClass,有一些字段,我保护它们,还有一些纯虚函数。然后是派生类,比如说DerivedClass class DerivedClass : public BassClass。 DerivedClass不应该从BassClass继承受保护的字段吗?当我尝试编译DerivedClass时,编译器抱怨DerivedClass没有任何这些字段,这里有什么问题? 感谢

2 个答案:

答案 0 :(得分:9)

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

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
};

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

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

或者你可以明确表示你是指一个班级成员:

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

答案 1 :(得分:0)

这有效:

#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; }
};