【发布时间】:2013-10-30 19:17:51
【问题描述】:
我有一个名为“Person”的 Person 类的构造函数,它看起来像这样:
Person(const char * their_name, const char * email, int day, int month, int year)
: name(0), email_address(0), birthday(day, month, year) {
name = new char [strlen(their_name)+1];
strcpy_s(name, strlen(their_name) +1, their_name);
email_address = new char[strlen(email) + 1];
strcpy_s(email_address, strlen(email) + 1, email);
cout << "\nPerson(...) FIRST CONSTRUCTOR CREATING: "<<name<<"\n";
printOn(cout);
}
我在这个类中有私有变量:
private:
char * name;
char * email_address;
Date birthday;
我认为这里有一个 off by 1 错误或其他东西,因为当我在 main 中测试我的构造函数时:
Person *p1 = new Person("Sarah", "iam@awesome.com", 2,2,1000);
这会打印到我的控制台:
Person(...) FIRST CONSTRUCTOR CREATING: Sarah
ààà
我不明白为什么它在构造函数运行后打印 a's... 任何人都可以看到这个问题吗?
编辑:我的 printOn 方法
/*print person on output stream o*/
virtual void printOn(ostream & o) const {
//print person
o << "………";
}
并覆盖
ostream & operator<<(ostream & ostr, const Person & p) {
p.printOn(ostr);
return ostr;
}
【问题讨论】:
-
使用
std::string。char*的所有问题都已解决。 -
你试过调试器吗?
-
我有,只是复制姓名和email的首字母,所以只应对S和i
-
函数 printOn(cout); 的作用是什么?做什么?
标签: c++ constructor strcpy