【C++入门(6)】类和对象(默认成员函数、运算符重载)

二、默认成员函数

2、析构函数

析构函数是在对象生命周期结束时,编译器自动调用的函数,用于清理对象内不能自动释放的数据,比如malloc、realloc、fopen的等。

函数名是类名,类名前加~,无返回值,无参数。

一个类只能有一个析构函数,如果没有被显式定义,编译器会自动生成一个析构函数。

析构函数也不支持重载。

编译器自动生成的析构函数,对内置类型不做处理,对自定义类型,调用自定义类型自己的析构函数。

class Taaa{
	public:
	~Taaa(){
		;
	}
	private:
	int a;
	int b;
}

3、拷贝构造函数

拷贝构造函数的一般用法如下:

int main()
{
	Date d1(2, 4, 7);

	//拷贝构造
	Date d2(d1);
    //或者
    Date d2 = d1;
	return 0;
}

可以看到拷贝构造其实就是把一个原有的该类的对象的数据对另一个新建的该类的对象进行初始化。

构造拷贝函数是构造函数的一个重载形式,它的参数只有一个,是对该类的一个对象的引用,如果使用传值形式给参数则会导致编译器报错。

Date(Date& d) {
		_a = d._a;
		_b = d._b;
		_c = d._c;
	}

如果没有显式定义拷贝构造函数,编译器也会自动生成一个默认的拷贝构造函数,只是默认的拷贝构造函数使用的是值拷贝,也就是浅拷贝。

所以我们平时使用拷贝构造函数时,如果要求使用深拷贝,是需要自己实现的,而不能用默认拷贝构造函数。

三、运算符重载

运算符重载是具有特殊函数名的函数,其他部分和普通函数一样,也有返回值类型,函数名,和参数列表。

class Date {
public:
	//Date(int a = 0, int b = 0, int c = 0) {
	//	_a = a;
	//	_b = b;
	//	_c = c;
	//}
	//Date(const Date& d) {
	//	_a = d._a;
	//	_b = d._b;
	//	_c = d._c;
	//}
	//~Date() {
	//	;
	//}
	//void Print() {
	//	cout << this->_a << '-' << this->_b << '-' << this->_c << endl;
	//}
	bool operator>(const Date& d) {
		if (_a > d._a) {
			return true;
		}
		else if (_a == d._a) {
			if (_b > d._b) {
				return true;
			}
			else if (_b == d._b) {
				if (_c > d._c) {
					return true;
				}
			}
		}
		return false;
	}
private:
	int _a;
	int _b;
	int _c;
};

int main()
{
	Date d1(2, 4, 7);
	Date d2(3, 5, 7);
	d1.operator>(d2);
	d1 > d2;
	return 0;
}

另外还需要注意:
1.不能通过operator来创建新运算符,比如试图用operator@来把@定义为一个新运算符;

2.重载操作符需要至少有一个自定义类类型作为参数,只用于内置类型的操作符是不可被重载的;

3.有五种操作符不可被重载:域作用限定符、sizeof、条件操作符、结构成员访问操作符、成员指针运算符。

::    sizeof    ? :    .    .*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值