如何在c++中从两层继承类调用函数

How to call function from a two-level inherited class in C++?

本文关键字:两层 继承 函数 调用 c++      更新时间:2023-10-16

我在prog2.cpp中得到了一个主程序

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

我需要从stack1。h中调用这个stack1,但这个原始函数来自stack。h,它是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"的实例匹配参数列表。

我已经尝试了很多方法来摆脱这个,但它总是导致更多的问题。我该如何解决这个问题?

调用父类的构造函数是子类的构造函数的责任。

你需要在stack1类中声明一个构造函数,基本上,将它的参数转发给它的父类的构造函数:

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

你并没有真正调用一个函数。你在调用构造函数。构造函数的规则是不同的。通常,使用子类调用继承自超类的方法是没有问题的。这很简单。但在这里,它不是一个方法,而是一个构造函数。

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

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