我正在使用c ++,我不知道如何使用派生类访问基类中的变量。 我需要获取基类中的值并在派生类中执行操作,因为当我调用函数时,基类中的所有函数都包含参数,
例如:
Baseclass.getvalue();
我不能提出任何参数,因为它没有定义。
我已经完成了像
这样的构造函数部分class derivedclass:baseclass
{
//insert functions here.
};
derivedclass::derivedclass()
:baseclass()
{
//insert initialization here
}
但我仍然无法访问这些值。救命?我需要使用虚拟吗?如果有,怎么样?
*这是用户定义的程序
答案 0 :(得分:3)
只需访问(public
或protected
)值,就像它们是派生类的一部分一样。
class baseclass {
protected:
int m_value;
public:
baseclass();
virtual int getvalue();
};
class derivedclass : public baseclass {
void dosomething(void) {
// whoa: `m_value` is part of `baseclass`, and we can simply access it here!
std::cout << "value: " << m_value << std::endl;
// we can also use `getvalue()`
std::cout << "getvalue(): " << getvalue() << std::endl;
}
};
答案 1 :(得分:1)
在这种情况下,继承是私有的,因此只能在派生类及其朋友中访问基础子对象及其成员。默认情况下,如果使用class
关键字引入类定义,则成员和基类是私有的,而struct
关键字是public。如果你想从外面访问它们,那么你需要公共继承:
class derivedclass : public baseclass {/*...*/};
或
struct derivedclass : baseclass {/*...*/};
如果派生类没有通过声明具有相同名称的成员来隐藏成员,则可以像访问派生类的成员一样访问它。 (如果继承是受保护的或私有的,那么它将在派生类中受到保护或私有,因此可能无法访问)。
如果它是隐藏的,并且您特别需要基类版本,那么您需要限定成员名称:
Derived.baseclass::getvalue()
但如果是这种情况,那么就会有一些时髦的事情,而且类接口可能需要重新思考。