将 class 类型作为构造函数参数传递 C++

Passing an class type as a constructor argument C++

当我偶然发现一个错误时,我正在尝试学习 C++。我有这个 class 继承自 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,并将它们作为参数传递时,问题就开始了。

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

当我编译它时它显示一个 "error no matching function for call to 'TEACHER::TEACHER()'" 并且我不知道如何初始化 CLASSROOM 构造函数。我尝试了一些事情,比如像使用其他构造函数一样初始化构造函数,但出现了同样的错误。

你的问题在这里:

class CLASSROOM : public TEACHER

你告诉编译器你的 CLASSROOM 一个 TEACHER,错误消息只是意味着你没有所谓的 "default constructor" 一个 TEACHER(只有一个以姓名、性别和头衔作为参数)。

当然,几乎可以肯定,您不希望 CLASSROOM 继承自 TEACHER。教室里可能有一位或多位老师,但不是老师。

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
};