【问题标题】:How to call function from a two-level inherited class in C++?如何从 C++ 中的两级继承类调用函数?
【发布时间】:2016-09-12 00:30:47
【问题描述】:

我在 prog2.cpp 中有一个主程序

#include "stack1.h"
int main(void){
stack1 x(100); // Declare a stack1 x of length 100
......
}

我需要从stack1.h调用这个stack1,但是这个原始函数来自stack.h,with是stack1.h的父类:

class stack
{
....
public:
stack(int length);
....
}

stack1.h 现在看起来像这样:

#include "stack.h"
class stack1: public stack{
...... //irrelevant code
}

问题是 stack1 x(100) 从 MVS 得到一个错误:

错误:没有构造函数“stack1::stack1”的实例与参数列表匹配。

我尝试了很多方法来解决这个问题,但总是会导致更多问题。我该如何解决这个问题?

【问题讨论】:

    标签: c++ inheritance multiple-inheritance


    【解决方案1】:

    调用超类的构造函数是子类的构造函数的职责。

    您需要在stack1 类中声明一个构造函数,该构造函数基本上将其参数转发给其超类的构造函数:

    struct stack1: public stack {
    
       stack1(int n) : stack(n) {}
    
    };
    

    您实际上并没有在这里调用函数。您正在调用构造函数。构造函数的规则是不同的。通常,使用子类调用从超类继承的方法是没有问题的。这很简单。但在这种情况下,它并不是真正的方法,而是构造函数。适用不同的规则。

    【讨论】:

      【解决方案2】:

      如果您只想使用父类的构造函数,可以使用using 关键字。

      class stack1 : public stack
      {
          using stack::stack;//use all constructors of stack
          using stack::operator=; //use the assignment operators
      };
      

      但是:请记住,这可能会以不同于您预期的方式初始化值。

      【讨论】:

      • 很遗憾我只能使用一个刻度。你们俩都给出了我想要的确切解决方案,谢谢!
      猜你喜欢
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2017-07-09
      • 2013-03-03
      相关资源
      最近更新 更多