博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++Primer : 第十四章 :赋值运算符
阅读量:2433 次
发布时间:2019-05-10

本文共 1357 字,大约阅读时间需要 4 分钟。

赋值运算符

赋值运算符可以把类的一个对象赋值给该类的另一个对象。此时,类还可以定义其它赋值运算符以使用别的类型作为右侧运算对象。
在拷贝赋值和移动赋值之外,标准库vector类还定义了第三种赋值运算符,该运算符接受花括号内的元素列表作为参数。我们能以如下的形式使用该运算符:

vector
v;v = {
"a", "an", "the"};

同样,也可以把这个运算符添加到StrVec类中

class StrVec {
public: StrVec& operator=(std::initializer_list
);};StrVec& StrVec::operator=(initializer_list
il) {
auto data = alloc_n_copy(il.begin(), il.end()); //alloc_n_copy分配内存空间并从给定范围内拷贝元素 free(); //销毁对象中的元素使其指向新空间 elements = data.first; //更新数据成员使其指向新的空间 first_free = cap = data.second; return *this;}

和拷贝赋值以及移动赋值运算符一样,其他重载的赋值运算符也必须先释放当前内存空间,再创建一片新空间。不同之处是,这个运算符无需检查对象向自身的赋值,这是因为它的形参initializer_list<string>确保il与this所指的不是一个对象。

我们可以重载赋值运算符。不论形参的类型是什么,赋值运算符都必须定义为成员函数。

复合赋值运算符

一般也定义在类的内部,为了与内置类型的复合赋值保持一致,类中的复合赋值运算符也要返回其左侧运算对象的引用。

Sales_data& Sales_data::operator+=(const Sales_data& rhs) {
units_sold += rhs.units_sold; revenue += rhs.revenue; return *this;}

为你的Sales_data类定义加法和复合赋值运算符

class Sales_data {
friend Sales_data operator+(const Sales_data& lhs, const Sales_data& rhs);public: Sales_data& operator+=(const Sales_data& rhs);};Sales_data operator+(const Sales_data& lhs, const Sales_data& rhs) {
Sales_data sum = lhs; sum += rhs; return sum;}Sales_data& Sales_data::operator+=(const Sales_data& rhs) {
units_sold += rhs.units_sold; revenue += rhs.revenue; return *this;}

转载地址:http://ttxmb.baihongyu.com/

你可能感兴趣的文章
小团队的微服务之路
查看>>
K8S精华问答 | Kubernetes集群不能正常工作,难道是防火墙问题?
查看>>
5G精华问答 | 什么是5G?5G与LTE有什么关系?
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
微服务精华问答 | 在使用微服务架构时,您面临哪些挑战?
查看>>
Kubernetes 调度器实现初探
查看>>
边缘计算精华问答 | 边缘计算有哪些应用场景?
查看>>
数据中台精华问答 | 数据中台和传统数仓的区别是什么?
查看>>
如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
查看>>
【C语言】C语言中常用函数源代码【strncpy ,strncat ,strncmp】
查看>>
【Java】【算法练习】题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。如果是输出yes,不是输出no,数组任意两个数字不相同。
查看>>
【Java】【多线程】—— 多线程篇
查看>>
【计算机网络】—— TCP/IP篇
查看>>
【Java】【算法】——算法篇
查看>>
【Java】【数据库】知识重点——数据库篇
查看>>
【Java】知识重点——消息队列篇
查看>>
【Java】学习总结 —— HashMap之put()方法实现原理
查看>>
【计算机网络】【TCP】如何讲清楚Tcp的三次握手和四次挥手?
查看>>
【Java】-- Java核心知识点总结
查看>>
【数据库】SQL之重点知识点总结
查看>>