面向对象编程

对象深拷贝

#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;

}

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值