//1.4.2指针与复制构造函数
include<bits/stdc++.h>
using namespace std;
struct Node{
char name;
int age;
Node(char n=" ",int a=0){
name=strdup(n);//strdup函数。将字符串写入内存,并返回一个指针
age=a;
}
/ Node(const Node& n){
name =strdup(n.name);
age=n.age;
}//复制构造函数,声明node2(node1)生成了rose的副本,node2.name指向这个副本之后,
//两个对象的数据成员赋值不会影响另一个的数据成员,即以下输出是18 rose 60 wendy
/
/ Node& operator=(const Node&n){//operator,可用于操作符重载和操作隐式转换
if(this !=&n){//对象可通过this来访问自己的地址,所以this就是对象本身
if(name!=0)
free(name);
name=strdup(n.name);
age=n.age;
}
return *this;
}//如果是用node2=node1来复制,不重新加载运算符也会出现同样的问题
*/
};
Node node1("rose",18),node2(node1);//or node2=node1;创建对象node1并对node1中的两个数据成员赋值,
//然后创建对象node2,根据node1中的值初始化node2中的数据成员
int main(){
strcpy(node2.name,"wendy");
node2.age=60;
cout<<node1.age<<" "<<node1.name<<" ";//输出18 wendy
cout<<node2.age<<" "<<node2.name<<endl;//输出60 wendy
//因为name是指针,node1和node2的name都指向同一个地址,所以node1.name也会变成wendy。
}