将 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
};
当我偶然发现一个错误时,我正在尝试学习 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
};