c++ - 继承类的构造函数格式

标签 c++ inheritance constructor

我在 linux 系统上用 c++ 编程上课。我有一个类 Queue 和一个类 Sim,它们继承了 Queue 的公共(public)成员。队列编译和测试正常。但是,当我尝试为类 Sim 编写构造函数时,出现错误。

我省略了不相关的代码。

错误:

~$ make -f p04make

make: Warning: File `Sim04.cpp' has modification time 7.2 s in the future

g++ -g -c Sim04.cpp

Sim04.cpp: In constructor âSim::Sim(int)â:

Sim04.cpp:28:64: error: no matching function for call to âQueue::Queue()â

Sim04.cpp:28:64: note: candidates are: Queue04.h:27:3: note: Queue::Queue(int)

Queue04.h:27:3: note: candidate expects 1 argument, 0 provided

Queue04.h:19:7: note: Queue::Queue(const Queue&)

Queue04.h:19:7: note: candidate expects 1 argument, 0 provided

make: * [Sim04.o] Error 1

在 Queue.h 中:

class Queue {
int* Q;
int oldest;
int newest;
int size;
int count;

public:
    Queue(int sz);

在 Queue.cpp 中:

Queue::Queue(int sz = 100)
        :oldest(0), newest(-1), size(sz),count(0) 
        {Q = new int[size];}

在 Sim.h 中:

class Sim:public Queue{
    int served;
    int totalresponse;
    int maxresponse;
    void arrival(int time);
    void departure(int time);
    void Print(ostream& o, char* t, int v, char* u);

public:
    Sim();

在 Sim.cpp 中:

Sim::Sim():served(0), totalresponse(0), maxresponse(0) {}

这些文件都链接到一个主程序文件中,我正在使用 makefile 进行编译。 我承认我不完全理解这个构造函数应该是怎样的,但我根据我们一直在使用的构造函数对其进行了建模。我认为构造函数应该继承Queue的构造函数并自动将Sim构造为Queue是不是对的?

最佳答案

您必须使用一些 int 参数从 Sim 构造函数调用 Queue 构造函数。所以你必须改变:

Sim::Sim():served(0), totalresponse(0), maxresponse(0) {}

比如:

Sim::Sim(int sz=100):Queue(sz), served(0), totalresponse(0), maxresponse(0) {}

您还需要稍微修改 Sim 构造函数声明以接收 Queue 需要的参数。

Sim(int sz);

关于c++ - 继承类的构造函数格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865915/

相关文章:

使用多重继承构建Python对象

c++ - 为什么我不能在派生类重写函数中调用 protected 虚拟基类函数?

c# - 如何使用反射创建 C# 数组并仅输入信息?

java 父类(super class)有多个构造函数

C++ 在头文件中声明实例变量并在源文件中调用构造函数

c++ - hiredis客户端,连接断开时redisAsyncFree报错

c++ - 为什么静态常量成员不能出现在像 'switch' 这样的常量表达式中

作为属性的 C++ COM 对象

python - 变量值中的继承 - Python

c++ - 可能未初始化的局部指针变量 'v',用于boost同构。