#include<iostream>
using namespace std;
class Person
{
char *name;int age;
public:
Person()
{name=NULL;age=20;};
void Init(int size,int age)
{
name=new char[size];
this->age=age;
}
int getAge(){return age;}
char *getName(){return name;}
void setAge(int age){this->age=age;}
void setName(char *name){strcpy(this->name,name);}
};
void main()
{
Person p1;
p1.Init(20,45);
Person p2=p1;
p1.setName("Peter");
cout<<p2.getName()<<endl;
}
淺拷貝問題,需要為P2重新分配空間,否則兩者名字一直相同,後果很嚴重~~~
這裡建議自己手動寫個拷貝建構函式,比如:
#include<iostream><br />using namespace std;<br />class Person<br />{<br />char *name;int age;<br />public:<br />Person()<br />{name=NULL;age=20;};<br />Person(Person &p);<br />void Init(int size,int age)<br />{<br />name=new char[size];<br />this->age=age;<br />}<br />int getAge(){return age;}<br />char *getName(){return name;}<br />void setAge(int age){this->age=age;}<br />void setName(char *name){strcpy(this->name,name);}<br />};<br />Person::Person(Person &p)<br />{<br />name=new char[strlen(p.name)+1];<br />strcpy(this->name,p.name);<br />this->age=p.age;<br />}<br />void main()<br />{<br />Person p1;<br />p1.Init(20,45);<br />Person p2=p1;<br />p1.setName("Peter");<br />p2.setName("周杰倫");<br />cout<<p2.getName()<<endl;<br />}