C++学习-类和对象(四)

运算符重载函数

为了增强程序的可读性,C++支持运算符重载。
运算符重载特征:
1. operator+合法的运算符构成函数名(重载<运算符的函数名:operator<)。
2. 重载运算符以后,不能改变运算符的优先级/结合性/操作数个数。

5个C++不能重载的运算符: .*/::/sizeof/?:/.

赋值运算符重载

拷贝构造函数是创建的对象,使用一个已有对象来初始化这个准备创建的对象。
赋值运算符的重载是对一个已存在的对象进行拷贝赋值

深入探究构造函数

#include<iostream>
using namespace std;
class Time
{
    public:
        Time() //构造函数
        {
            cout<<"Time()"<<endl;
            _hour=0;
            _minute=0;
            _second=0;
        }
        Time(const Time& t) //拷贝构造函数
        {
            cout<<"Time(const Time& d)"<<endl;
            _hour=t._hour;
            _minute=t._minute;
            _second=t._second;
        }
        Time& operator=(const Time& t) //赋值函数重载
        {
            cout<<"opeator()"<<endl;
            if(this!=&t)
            {
                _hour=t._hour;
                _minute=t._minute;
                _second=t._second;

            }
            return *this;


        }
        ~Time() //析构函数
        {
            cout<<"~Time()"<<endl;
        }
    private:
        int _hour;
        int _minute;
        int _second;
};
class Data

{
    public:
     //构造函数体内进行赋值
     Data(int year,int month,int day,const Time& t)
     {
        cout<<"Data(),赋值形式"<<endl;
        _year=year;
        _month=month;
        _day=day;
        _t=t;
     }
     //初始化参数列表
//      Data(int year,int month,int day,const Time& t)
//      
//      
//          :_year(year)
//          ,_month(month)
//          ,_day(day)
//          ,_t(t)
//          {
//              cout<<"Data()参数列表形式"<<endl;
//
//          }
//      }

        void Display()
        {
            cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
        }

    private:
        int _year;
        int _month;
        int _day;
        Time _t;

};
void Test()
{
    Time t1;
    Data d1(2018,1,1,t1);//调用构造函数
    d1.Display();

}

这里写图片描述

这里写图片描述

Time()
Time()
Data(),赋值形式
opeator()
2018-1-1
~Time()
~Time()

初始化顺序

[zyc@localhost lession_class]$ ./a.out 
Data()
0-4196336-2018
~Data()

const修饰成员函数

class Data

{
    public:
        Data(int year=1999,int month=2,int day=10)
            :_year(year)
            , _month(month)
            ,_day(day)
            {
                cout<<"data()"<<endl;
            }



        void Display()
        {
            cout<<"Display()"<<endl;
            cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
        }
        void Display()const
        {
            cout<<"Display()const"<<endl;
            cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
        }


        ~Data()
        {

            cout<<"~Data()"<<endl;
        }


    private:
        int _year;
        int _month;
        int _day;

};
int main()
{

    Data d1;//调用构造函数

    d1.Display();
    const Data d2;
    d2.Display();


    return 0;

}

猜你喜欢

转载自blog.csdn.net/zgege/article/details/81062209