簡體   English   中英

繼承類的構造函數的格式

[英]Format of constructor of an inherited class

我正在使用Linux系統上的C ++進行類編程。 我有一個Queue類和一個Sim類,它繼承了Queue的公共成員。 隊列正在編譯和測試正常。 但是,當我嘗試為Sim類編寫構造函數時,出現錯誤。

我省略了無關的代碼。

錯誤:

〜$ make -f p04make

make:警告:文件“ Sim04.cpp”的修改時間為7.2 s

g ++ -g -c Sim04.cpp

Sim04.cpp:在構造函數âSim:: Sim(int)â中:

Sim04.cpp:28:64:錯誤:沒有匹配的函數調用Queue :: Queue()

Sim04.cpp:28:64:注意:候選者是:Queue04.h:27:3:注意:Queue :: Queue(int)

Queue04.h:27:3:注意:候選人期望1個參數,提供0個

Queue04.h:19:7:注意:Queue :: Queue(const Queue&)

Queue04.h:19:7:注意:候選人期望1個參數,提供0個

make: * [Sim04.o]錯誤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);

您沒有為Queue聲明默認構造函數。 Sim的構造函數將在構造過程中自動調用Queue的構造函數。

為了使它編譯,您需要在sim的構造過程中實現Queue的默認構造函數(不帶任何參數),或者需要顯式調用Queue的整數構造函數(帶int的整數)。

您可以在Queue.cpp中進行更改

Queue :: Queue(int sz = 100)到Queue :: Queue(int sz)

然后在Queue.h中

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

public:
    Queue(int sz);

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

public:
    Queue(int sz = 100);

而且會起作用。 你只是犯錯了; 在標頭中指定默認值,而不是在實現中指定。

還有一件事:它繼承了整個Queue類,您不能繼承某些成員。 公共意味着基類的所有公共領域也將在派生類中也是公共的。 私有意味着基類的所有成員在派生中都是私有的,而與基類的實際范圍無關。 受保護意味着所有公共成員都將轉向受保護成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM