有没有办法可以使用派生类访问基类中的值?

时间:2014-01-16 14:45:52

标签: c++ class inheritance arguments virtual

我正在使用c ++,我不知道如何使用派生类访问基类中的变量。 我需要获取基类中的值并在派生类中执行操作,因为当我调用函数时,基类中的所有函数都包含参数,

例如:

Baseclass.getvalue();

我不能提出任何参数,因为它没有定义。

我已经完成了像

这样的构造函数部分
class derivedclass:baseclass
{
//insert functions here.
};

derivedclass::derivedclass()
     :baseclass()
{
 //insert initialization here
}

但我仍然无法访问这些值。救命?我需要使用虚拟吗?如果有,怎么样?

*这是用户定义的程序

2 个答案:

答案 0 :(得分:3)

只需访问(publicprotected)值,就像它们是派生类的一部分一样。

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()

但如果是这种情况,那么就会有一些时髦的事情,而且类接口可能需要重新思考。