【问题标题】:Is there a way that I can access the values in the base class using the derived class?有没有办法可以使用派生类访问基类中的值?
【发布时间】:2014-01-16 14:45:52
【问题描述】:

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

例如:

Baseclass.getvalue();

我不能输入任何参数,因为它没有被定义。

我已经完成了构造函数部分

class derivedclass:baseclass
{
//insert functions here.
};

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

但我仍然无法访问这些值。帮助?我需要使用虚拟吗?如果是,怎么做?

*这是一个用户自定义程序

【问题讨论】:

  • 请显示您希望访问的值的声明。请记住,它们需要受到保护或公开才能被子类访问。
  • 给出一个函数的具体例子,基类中的“值”,你如何尝试访问它,以及失败的原因。

标签: c++ class inheritance arguments virtual


【解决方案1】:

只需访问(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;
  }
};

【讨论】:

  • 如果是public或protected,如果是private,派生类将无权访问。
  • @T.Kiley 是的,这就是我在回答中提到public 和protected 的原因。
  • 抱歉,在评论时没有:)
【解决方案2】:

在这种情况下,继承是私有的,因此基子对象及其成员只能在派生类及其朋友中访问。默认情况下,如果使用 class 关键字引入类定义,则成员和基类是私有的,而使用 struct 关键字引入的则是公共的。如果你想从外部访问它们,那么你需要公共继承:

class derivedclass : public baseclass {/*...*/};

或

struct derivedclass : baseclass  {/*...*/};

如果派生类没有通过声明具有相同名称的成员来隐藏该成员,则您可以像访问派生类的成员一样访问它。 (如果继承是受保护的或私有的,那么它将在派生类中受到保护或私有,因此可能无法访问。

如果它是隐藏的,并且您特别想要基类版本,那么您需要限定成员名称:

Derived.baseclass::getvalue()

但如果是这样的话,那就有一些奇怪的事情发生了,类接口可能需要重新考虑。

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 2021-01-12
    • 2019-08-31
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2021-07-24
    • 2019-03-17
    相关资源
    最近更新 更多