本文共 2575 字,大约阅读时间需要 8 分钟。
概念:
构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始值,并且在对象的生命周期内只调用一次。 特征:public : // 1.无参构造函数 Date () { } // 2.带参构造函数 Date (int year, int month , int day ) { _year = year ; _month = month ; _day = day ; }private : int _year ; int _month ; int _day ;};
Date() { _year = 1900 ; _month = 1 ; _day = 1; } Date (int year = 1900, int month = 1, int day = 1) { _year = year; _month = month; _day = day; }
一般都写成全缺省构造函数。
7.重点:当我们不实现构造函数系统会自动生成那我们为什么要去实现构造函数呢?其实是有原因的因为C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语法已经定义好的类型:如 int/char…,自定义类型就是我们使用class/struct/union自己定义的类型,看看下面的程序,就会发现 编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数class Time{ public: Time() { cout << "Time()" << endl; hour = 0; _minute = 0; _second = 0; }private: int _hour; int _minute; int _second;};class Date{ private: // 基本类型(内置类型) int _year; int _month; int _day; // 自定义类型 Time _t;};
这里Time 就是我们自定义的类型当我们去查看初始化数据时 自定义类型会用自己所实现的构造函数,而内置函数会默认初始化。
概念:
析构函数:与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而 对象在销毁时会自动调用析构函数,完成类的一些资源清理工作析构函数是特殊的成员函数。
其特征如下:~SeqList() { if (_pData) { free(_pData ); // 释放堆上的空间 _pData = NULL; // 将指针置为空 _capacity = 0; _size = 0; } }
~String() { cout << "~String()" << endl; free(_str); }
概念:
构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象 创建新对象时由编译器自动调用 特征:Date(const Date& d) { _year = d._year; _month = d._month; _day = d._day; }
函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型 operator操作符(参数列表) 注意: 不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型或者枚举类型的操作数 用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不 能改变其含义 作为类成员的重载函数时,其形参看起来比操作数数目少1成员函数的 操作符有一个默认的形参this,限定为第一个形参 .* 、:: 、sizeof 、?: 、. 注意以上5个运算符不能重载。这个经常在笔试选择题中出现bool operator==(const Date& d1, const Date& d2){ return d1._year == d2._year; && d1._month == d2._month && d1._day == d2._day;}
特点:
Date& operator=(const Date& d) { if(this != &d) { _year = d._year; _month = d._month; _day = d._day; } }
转载地址:http://fvlh.baihongyu.com/