【问题标题】:Passing an class type as a constructor argument C++将类类型作为构造函数参数传递 C++
【发布时间】:2020-05-24 11:06:31
【问题描述】:

当我偶然发现一个错误时,我正在尝试学习 c++。我有这个类继承自 PERSON 类。

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

现在问题开始了,当我需要将此类 TEACHER 放置在构造函数中以创建类 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
};

当我编译它时,它显示“错误没有匹配函数调用 'TEACHER::TEACHER()'”,我不知道如何初始化 CLASSROOM 构造函数。我尝试了一些事情,比如像初始化其他构造函数一样初始化构造函数,但出现了同样的错误。

【问题讨论】:

    标签: c++ class constructor initialization


    【解决方案1】:

    CLASSROOM 不是 TEACHER,所以我认为并不想从 TEACHER 类派生 CLASSROOM 类。

    一旦上述修正,您就可以编写如下构造函数:

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

    【讨论】:

      【解决方案2】:

      你的问题在这里:

      class CLASSROOM : public TEACHER

      您告诉编译器您的 CLASSROOM 一位教师,而错误消息只是意味着您没有所谓的教师“默认构造函数”(只有一个带有姓名、性别、和标题作为参数)。

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

      【讨论】:

        猜你喜欢
        • 2019-09-29
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2018-04-10
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多