如何使用构造函数初始化另一个类中的对象?

时间:2017-01-11 14:56:57

标签: c++ constructor initialization

我是学习c ++的新手,也是一个坚持构造函数的人。我有一个班级Teacher和一个班级Subject。在课程Teacher中,a有一个对象Subject S[]。我如何使用TeacherS[]中的构造函数进行初始化?我试过这个: 在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]=" ";
  }
}

2 个答案:

答案 0 :(得分:1)

你现在拥有它的方式,你必须写

S[i] = new Subject();

而不是

S[i].Subject();

但这会让你不得不记得在某个时候打电话给delete。使用

会更好

std::list<Subject> S;

取代

Subject *S[20];

然后push_back甚至更加闪烁的emplace_back代替S[i].Subject();

请参阅http://en.cppreference.com/w/cpp/container/list

答案 1 :(得分:1)

  

在班级教师a中有一个对象主题S []

不,你不要:

Subject *S[20];

Teacher::S是一个指针数组。

S[i].Subject();

.用于成员访问。指针没有成员,所以这在语法上是错误的。此外,你永远不会直接调用构造函数。它由于初始化变量或新表达式而自动调用。

似乎想要将Subject个对象数组作为成员。这就是你宣布这样一个成员的方式:

Subject S[20];

在执行Teacher构造函数体之前,将构造数组中的对象。