C++初期知识点体会小结(其三)

1.赋值运算符重载

1)运算符重载

·运算符重载是具有特名字的函数,他的名字是由operator和后面要定义的运算符共同构成(如operator+,operator=,operator>等等)同样具有返回类型,参数等。

·重载运算符函数的参数个数和该运算符作用的运算对象数量⼀样多。几元运算符就要有几个参数,二元运算符的左侧运算对象传给第⼀个参数,右侧运算对象传给第二个参数。

*如果⼀个重载运算符函数是成员函数,则它的第一个运算对象默认传给隐式的this指针,因此运算 符重载作为成员函数时,参数比运算对象少⼀个

·无法重载的五个运算符:

.*   ::   sizeof   ?:   . 

·重载操作符至少有⼀个类类型参数,不能通过运算符重载改变内置类型对象的含义。

·重载++运算符时,有前置++和后置++,运算符重载函数名都是operator++,无法很好的区分。 C++规定,后置++重载时,增加⼀个int形参,跟前置++构成函数重载,方便区分。

Date Date::operator++(int)//后置++
Date& Date::operator++()//前置++

·重载>>和<<时,需要重载为全局函数,因为重载为成员函数,this指针默认抢占了第⼀个形参位 置,第⼀个形参位置是左侧运算对象,调用时就变成了------对象<<cout(与阅读习惯相悖)重载为全局函数把ostream/istream放到第⼀个形参位置就可以了,第二个形参位置当类类型对象。

ostream& operator<<(ostream& out, const Date& d);
istream& operator>>(istream& in, Date& d);
//注意要在类中进行友元函数声明,否则无法访问d的私有,从而不能输入输出

2)赋值运算符重载

*赋值运算符重载是⼀个默认成员函数,用于完成两个已经存在的对象直接的拷贝赋值,这里要注意跟拷贝构造区分,拷贝构造用于⼀个对象拷贝初始化给另⼀个要创建的对象

*赋值运算符重载是⼀个运算符重载,规定必须重载为成员函数

·有返回值(为支持连续赋值),且建议写成当前类类型引用,引用返回可以提高效率。赋值运算重载的参数建议写成 const当前类类型引用,否则会传值传参会有拷贝

·没有显式实现时,编译器会自动生成⼀个默认赋值运算符重载,默认赋值运算符重载行为跟默认构造函数类似,对内置类型成员变量会完成值拷贝/浅拷贝(⼀个字节⼀个字节的拷贝),对自定义类型成员变量会调用他的拷贝构造。

·如果⼀个类显示实现了析构并释放资源,那么他就需要显示写赋值运算符重载,否则就不需要。

2.取地址运算符重载

1)const成员函数

void Print(const Date* const this) const;

void Print() const;

const修饰在C++中放在最后,注意写法。

2)取地址运算符重载

取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载,⼀般这两个函数编译器自动生成的就可以够我们用了,不需要去显示实现。除非⼀些很特殊的场景,比如我们不想让别人取到当前类对象的地址,就可以自己实现⼀份,胡乱返回⼀个地址。

    Date* operator&()
	{
		//return this;
		//return nullptr;
		return (Date*)0x2673FF40;
	}
	
	const Date* operator&() const
	{
		//return this;
		//return nullptr;
		return (Date*)0x2673FE30;
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值