对象深拷贝
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class MyDate{
public:
int y,m,d;
MyDate(){}
MyDate(int y1,int m1,int d1):y(y1),m(m1),d(d1){}
void set(int y,int m,int d)
{
this->y=y;
this->m=m;
this->d=d;
}
void show()
{
printf("%d,%d,%d",y,m,d);
printf("\n");
}
};
class Person{
public:
char *name;
MyDate *birthday;
Person(char* na, MyDate bir);
Person(const Person& p);
~Person();
void show(){
printf("%s ",name);
birthday->show();
}
}; //类Person
Person::Person(const Person& p)
{
name=new char[strlen(p.name)+1];
strcpy(name,p.name);
birthday = new (MyDate);
birthday->y = p.birthday->y;
birthday->m = p.birthday->m;
birthday->d = p.birthday->d;
printf("构造:%s %d,%d,%d\n", this->name, birthday->y, birthday->m, birthday->d);
}
Person::Person(char* na, MyDate bir)
{
this->name=na;
name=new char[strlen(na)+1];
strcpy(name,na);
birthday = new (MyDate);
birthday->y = bir.y;
birthday->m = bir.m;
birthday->d = bir.d;
printf("构造:%s %d,%d,%d\n", this->name, birthday->y, birthday->m, birthday->d);
}
Person::~Person()
{
printf("析构:%s %d,%d,%d\n", name, birthday->y, birthday->m, birthday->d);
delete []name;
delete birthday;
}
int main(){
char name[10];
int y,m,d;
scanf("%s",name);
scanf("%d,%d,%d",&y,&m,&d);
MyDate t(y,m,d);
Person p1(name,t);
Person p2(p1);
p2.birthday->set(1987,2,27);
p1.show();
p2.show();
p2.birthday = new MyDate(2020,1,2);
p1.show();
p2.show();
return 0;
}