c++ primer 学习笔记:复制控制之赋值操作符

赋值操作符

与类要控制初始化对象的方式一样,类也定义了该类型对象赋值时会发生什么:
Sales_item trans, accum;
trans = accum;
与复制构造函数一样,如果类没有定义自己的赋值操作符,则编译器会合成一个。

重载操作符

重载操作符是一些函数,其名字为operator 后跟着所定义的操作符的符号。因此,通过定义名为 operator= 的函数,我们可以对赋值进行定义。像任何其他函数一样,操作符函数有一个返回值和一个形参表。形参表必须具有与该操作符数目相同的形参(如果操作符是一个类成员,则包括隐式this 形参)。赋值是二元运算,所以该操作符函数有两个形参:第一个形参对应着左操作数,第二个形参对应右操作数。
大多数操作符可以定义为成员函数或非成员函数。当操作符为成员函数时,它的第一个操作数隐式绑定到this 指针。有些操作符(包括赋值操作符)必须是定义自己的类的成员。因为赋值必须是类的成员,所以this 绑定到指向左操作数的指针。因此,赋值操作符接受单个形参,且该形参是同一类类型的对象。右操作数一般作为 const 引用传递。
赋值操作符的返回类型应该与内置类型赋值运算返回的类型相同。内置类型的赋值运算返回对右操作数的引用,因此,赋值操作符也返回对同一类类型的引用。例如,Sales_item 的赋值操作符可以声明为:
class Sales_item {
public:
    // other members as before
    // equivalent to the synthesized assignment operator
    Sales_item& operator=(const Sales_item &);
};

合成赋值操作符

合成赋值操作符与合成复制构造函数的操作类似。它会执行逐个成员赋值:右操作数对象的每个成员赋值给左操作数对象的对应成员。除数组之外,每个成员用所属类型的常规
方式进行赋值。对于数组,给每个数组元素赋值。例如,Sales_item 的合成赋值操作符可能如下所示:
// equivalent to the synthesized assignment operator
Sales_item&
Sales_item::operator=(const Sales_item &rhs)
{
    isbn = rhs.isbn; // calls string::operator=
    units_sold = rhs.units_sold; // uses built-in int assignment
    revenue = rhs.revenue; // uses built-in double assignment
    return *this;
}
合成赋值操作符根据成员类型使用适合的内置或类定义的赋值操作符,依次给每个成员赋值,该操作符返回*this,它是对左操作数对象的引用。

复制和赋值常一起使用

可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。我们的Sales_item 类无须定义复制构造函数或赋值操作符,这些操作符的合成版本工作得很好。然而,类也可以定义自己的赋值操作符。一般而言,如果类需要复制构造函数,它也会需要赋值操作符。
实际上,就将这两个操作符看作一个单元。如果需要其中一个,我们几乎也肯定需要另一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《C Primer》(第5版)是一本C语言的入门教材,对于初学者来说是一本很好的学习资料。它以中文回答了大量的C语言习题,为读者提供了一个循序渐进的学习过程。 这本书有一些优点,首先是适合各种学习条件的读者。无论是想要在大学学习C语言的学生,还是自学编程的初学者,都可以从这本书中受益。其次,书中的内容易于理解。作者采用简明易懂的语言,讲解了C语言的基础知识和编程技巧,帮助读者快速掌握C语言。第三,书中的习题丰富多样,涵盖了从简单到复杂的各个方面。这些习题不仅有助于加深对C语言知识的理解,还可以帮助读者锻炼编程能力。 由于本人无法提供PDF文档,请读者自行查询并下载该书的PDF版本。这本书不仅仅是一个习题集,它还包含了大量的示例代码和案例分析,这些都对读者的学习和实践提供了很好的帮助。 总之,《C Primer》(第5版)是一本很棒的C语言学习资料,读者可以通过习题的练习提高自己的编程能力,掌握C语言的基础知识。希望读者能够借助这本书的帮助,快速地学会C语言编程。 ### 回答2: " C Primer习题集:第5版pdf " 是一本同名教材的习题集,针对C语言编程进行了深入的练习。该习题集的PDF版本可以在网络上进行下载。 这本习题集是为了帮助C语言初学者提高他们的编程技能。它从基础知识开始,逐渐深入到更高级的概念和技术。习题集的章节组织结构与原版教材一致,旨在提供一个系统和综合的学习体验。 这本习题集涵盖了许多重要的编程主题,如变量、运算符、控制流程、数组、字符串、指针、结构体和文件。每个章节都包含大量的习题,涵盖了不同难度级别的问题。这些习题可帮助学生巩固已学知识,并提供了实践机会以应用所学的概念。 与原版教材相比,该习题集以问题为驱动,需要学生进行自我思考和解答。通过反复实践和解决问题,学生可以更好地理解C语言的概念和技术。 总的来说, C Primer习题集:第5版pdf 提供了一个实践性强、系统性好的学习工具,适合想要提高他们C语言编程技能的人使用。通过完成这些习题,学生可以更深入地理解C语言的各个方面,并在实际项目中应用所学的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值