c++类的封装性实验

一.拷贝构造函数(复制构造函数)

        1)区别

                a)对象的赋值:对一个已经存在的对象赋值

                b)对象的复制:从到有地建立一个新的对象

        2)拷贝构造函数的声明:类名(类名 &对象名)

                                                例:Box (Box & box1);

                                       调用:类名  对象(要被复制的对象名)

                                                例: Box box1(12,15,16);

                                                      Box box2(box1); 

        3)调用拷贝构造函数的时机:若用户定义拷贝构造函数,则系统提供一个默认的拷贝构造函数,用“老对象”的数据成员的值对“新对象”的数据成员一一进行赋值。(当数据成员出现new运算时,必须在类中显示定义一个拷贝构造函数!)

                a)对象的复制。 Box box2 = box1;  //按box1复制给box2

                b)函数的参数是类的对象

                c)函数的返回值是类的对象

二.小知识点

        1.析构函数就算执行操作,后面的大括号与分号也必须有。(否则就变成了只有声明,没有后续)

                例:~类名(){;}

        2.利用形式参数为指针访问私有数据成员时,注意:指针变量赋值一个常数时要加*取值。

#include <bits/stdc++.h>
using namespace std;

class Data
{
    int year,month,day;
    public:
        Data(int y,int m,int d)    //定义构造函数
        {
            year = y; 
            month = m;
            day = d;
        }
        
        Data(const Data&data)    //定义拷贝构造函数
        {
            year = data.year;
            month = data.month;
            day = data.day;
        }
        
        void display()//定义dispaly公有函数
        {
            cout<<"year:"<<year<<endl;
            cout<<"month:"<<month<<endl;
            cout<<"day:"<<day<<endl;
        }
        
        void set_ymd(int y,int m,int d)//通过公有成员函数对私有数据成员赋值
        {
            y = year;
            m = month;
            d = day;
        }
        
        int set_y(int y) //通过函数返回值类型为引用的成员函数对私有数据成员赋值
        {
            year = y;
            return y;
        }
        int set_m(int m)
        {
            month = m;
            return m;
        }
        int set_d(int d)
        {
            day = d;
            return d;
        }
        
        int yy(){//利用函数返回值访问私有数据成员;
            return year;
        }
        int mm() {
            return month;
        }
        int dd() {
            return day;    
        }
        
        void get_ymd(int *py,int *pm,int *pd)//利用形式参数为指针访问私有数据成员;
        {
            *py = year;
            *pm = month;
            *pd = day;
        }
        
        void getS_ymd(int &py,int &pm,int &pd)//利用形式参数为引用访问私有数据成员。
        {
            py = year;
            pm = month;
            pd = day;
        }

        ~Data(){;}//定义析构函数
};

class Time
{
    int hour,minute,second;
    public:
        Time(int h,int m,int s)    //定义构造函数
        {
            hour = h;
            minute = m;
            second = s;
        }
        
        Time(const Time&time)    //定义拷贝构造函数
        {
            hour = time.hour;
            minute = time.minute;
            second = time.second;
        }
        
        void display()//定义dispaly公有函数
        {
            cout<<"hour:"<<hour<<endl;
            cout<<"minute:"<<minute<<endl;
            cout<<"second:"<<second<<endl;
        }
        
        void set_hms(int h,int m,int s)//通过公有成员函数对私有数据成员赋值
        {
            h = hour;
            m = minute;
            s = second;
        }
        
        int set_h(int h) //通过函数返回值类型为引用的成员函数对私有数据成员赋值
        {
            hour = h;
            return h;
        }
        int set_m(int m)
        {
            minute = m;
            return m;
        }
        int set_s(int s)
        {
            second = s;
            return s;
        }
        
        int hh() {//利用函数返回值访问私有数据成员;
            return hour;
        }
        int mm() {
            return minute;
        }
        int ss() {
            return second;
        }
        
        void get_hms(int *ph,int *pm,int *ps)//利用形式参数为指针访问私有数据成员;
        {
            *ph = hour;
            *pm = minute;
            *ps = second;
        }
        
        void get_hms(int &ph,int &pm,int &ps)//利用形式参数为引用访问私有数据成员。
        {
            ph = hour;
            pm = minute;
            ps = second;
        }
        
        ~Time(){;}//定义析构函数
};

int main()
{
    int year,month,day,hour,minute,second;
    cout<<"请输入年月日:"<<endl;
    cin>>year>>month>>day;
    cout<<"请输入时分秒:"<<endl;
    cin>>hour>>minute>>second;
    
    Data data2(year,month,day);//声明类(调用构造函数)
    Time time2(hour,minute,second); 
        
//   Data data(data2); //调用拷贝构造函数
//   Time time(time2);
    
//    data2.set_ymd(year,month,day);//通过公有成员函数对私有数据成员赋值;
//    time2.set_hms(hour,minute,second);

    
//  data2.set_y(year);  //通过函数返回值类型为引用的成员函数对私有数据成员赋值
//	data2.set_m(month);
//	data2.set_d(day);
//	time2.set_h(hour);
//	time2.set_m(minute);
//	time2.set_s(second);     

//	year = data2.yy() ;//利用函数返回值访问私有数据成员;
//	month = data2.mm() ;
//	day = data2.dd() ;
//	hour = time2.hh() ;
//	minute = time2.mm() ;
//	second = time2.ss() ;
    
//  data2.get_ymd(&year,&month,&day);//利用形式参数为指针访问私有数据成员;
//  data2.get_hms(&hour,&minute,&second);
    
//  data2.getS_ymd(year,month,day);//利用形式参数为引用访问私有数据成员。
//  time2.getS_hms(hour,minute,second);
    
    data2.display();//调用dispaly公有函数
    time2.display();
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴同学·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值