定义一个人员类Person,其中有姓名,年龄和性别,姓名用指针,在构造函数中

定义一个人员类Person,其中有姓名,年龄和性别,姓名用指针,在构造函数中用new运算符动态分配内存,在析构函数中有delete运算符释放。在类中重载赋值运算符“=”实现两个对象间的赋值。编写主函数测试重载的赋值运算符。说明如果在类中不重载赋值运算符,能否实现两个Person类对象之间的赋值。

我会采用深复制构造函数实现Copy对象,而不是重载=运算符。

原因:因为使用了动态内存分配,当被Copy的对象使用完毕时析构函数将释放其所申请的内存空间,但Copy的对象还在使用中,此时释放内存将造成程序崩溃。


#include<iostream>
using namespace std;

namespace ns{
class Person{
public:
Person(){}
Person(char *name, int age,char *sex){
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);

this->sex = new char[strlen(sex) + 1];
strcpy(this->sex, sex);

this->age = age;
}
// æ·±å¤åˆ¶æž„造函数
Person(const Person &obj){
this->name = new char[strlen(obj.name) + 1];
strcpy(this->name, obj.name);

this->sex = new char[strlen(obj.sex) + 1];
strcpy(this->sex, obj.sex);

this->age = obj.age;
}

~Person(){
delete this->sex;
delete this->name;
}
void print(){
cout << "name=" << this->name << "\tage=" 
 << this->age << "\tsex=" << this->sex << endl;
}

private:
char *name;
int age;
char *sex;
};
}
int main(int argc, char *argv[]){

ns::Person person("James", 20, "男");
person.print();

ns::Person person2("Lisa", 22, "女");
person2.print();

ns::Person deepCopy=person2;
deepCopy.print();


return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答