簡體   English   中英

將 class 類型作為構造函數參數傳遞 C++

[英]Passing an class type as a constructor argument C++

當我偶然發現一個錯誤時,我正在嘗試學習 c++。 我有這個繼承自 class PERSON 的 class。

#include <iostream>
#include <string>

class PERSON
 {
 private:
    std::string name;
    bool sex;
 public:
        PERSON(std::string name, bool sex) : name(name) , sex(sex){};
       //methods
};

class TEACHER:  public PERSON
{
private:
    std::string title;
public:
    TEACHER(std::string name, bool sex, std::string title) : PERSON(name,sex), title(title){};
//methods
};

現在問題開始了,當我需要將此 class TEACHER 放在構造函數中以創建 class CLASSROOM 時,將它們作為 arguments 傳遞。

class CLASSROOM : public TEACHER
{
private:
    std::string name;
    TEACHER lecturer;
    TEACHER s_teacher;
public:
    CLASSROOM(std::string name, TEACHER lecturer , TEACHER s_teacher){};
    //methods
};

當我編譯它時,它顯示“錯誤沒有匹配 function 以調用 'TEACHER::TEACHER()'”並且我不知道如何初始化 CLASSROOM 構造函數。 我嘗試了一些事情,比如初始化構造函數,就像我使用其他構造函數一樣,但出現了同樣的錯誤。

CLASSROOM 不是一種 TEACHER,所以我認為真的不想從TEACHER class 派生CLASSROOM class。

一旦上述更正,您可以編寫構造函數,如下所示:

class CLASSROOM 
{
private:
    std::string name;
    TEACHER lecturer;
    TEACHER s_teacher;
public:
    CLASSROOM(std::string name, TEACHER lecturer , TEACHER s_teacher):  
       name(name),
       lecturer(lecturer),
       s_teacher(s_teacher) {};
    //methods
};

你的問題在這里:

class CLASSROOM: public TEACHER

您告訴編譯器您的 CLASSROOMTEACHER,錯誤消息僅表示您沒有 TEACHER 的所謂“默認構造函數”(只有一個以姓名、性別和標題作為參數的構造函數)。

當然,幾乎可以肯定,您不希望 CLASSROOM 繼承自 TEACHER。 一個教室里可能有一個或多個老師,但它不是老師。

暫無
暫無

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

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