我是学习c ++的新手,也是一个坚持构造函数的人。我有一个班级Teacher
和一个班级Subject
。在课程Teacher
中,a有一个对象Subject S[]
。我如何使用Teacher
类S[]
中的构造函数进行初始化?我试过这个:
在Teacher.h文件中
class Teacher
{
private:
string name;
Subject *S[20];
public:
Teacher();
}
在Teacher.cpp文件中
Teacher::Teacher()
{
name=" ";
for(int i=0; i<20; i++)
{
S[i].Subject();
}
}
在Subject.cpp文件中,构造函数为:
Subject::Subject()
{
day=0;
hour=0;
for(int i=0; i<10; i++)
{
classroom[i]=" ";
}
}
答案 0 :(得分:1)
你现在拥有它的方式,你必须写
S[i] = new Subject();
而不是
S[i].Subject();
但这会让你不得不记得在某个时候打电话给delete
。使用
std::list<Subject> S;
取代
Subject *S[20];
然后push_back
甚至更加闪烁的emplace_back
代替S[i].Subject();
答案 1 :(得分:1)
在班级教师a中有一个对象主题S []
不,你不要:
Subject *S[20];
Teacher::S
是一个指针数组。
S[i].Subject();
.
用于成员访问。指针没有成员,所以这在语法上是错误的。此外,你永远不会直接调用构造函数。它由于初始化变量或新表达式而自动调用。
似乎想要将Subject
个对象数组作为成员。这就是你宣布这样一个成员的方式:
Subject S[20];
在执行Teacher
构造函数体之前,将构造数组中的对象。