第十一章:使用类

局部变量和临时对象不能作为返回值

operator+()
operator*()

重载运算符的限制:

  1. 重载的运算符必须有一个操作数是用户自定义的类型
  2. 使用运算符是不能违反运算符原来的句法规则
  3. 不能创建新运算符
  4. 不能重载以下运算符
    • sizeof
    • .
    • *
    • ::
    • ?:
    • typeid
    • const cast
    • dynamic cast
    • reinterpret
    • static cast
  5. 大多数的可以重载的运算符都可以通过成员或非成员函数进行重载,但是以下运算符只能通过成员函数进行重载:
    • = 赋值
    • () 函数调用
    • [] 下标
    • -> 指针访问类成员

访问类中私有数据成员或者成员函数的途径是公有函数。也可通过友元进行访问。

友元函数
友元类
友元成员函数

类成员函数重载二元运算符,其中一个参数不是类对象时,运算的第一个参数必须是类对象。
解决方法:
非类成员函数重载运算符
但是,非类成员函数不能访问对象的私有成员
友元函数的出现就是为了解决这个问题

友元函数特性:

  1. 使用方法:在类中声明,函数前面添加friend
  2. 不能使用类对象调用
  3. 和成员函数的访问权限相同

只有类声明可以控制哪些函数是友元

强制类型转换,函数无返回值无参数
重载输出运算符,返回值是ostream对象的引用,参数ostream对象,声明为友元函数。

重载运算符是选择为成员函数还是选择为非成员函数呢?

  • 对于某些运算符选择成员函数时唯一的选择
  • 其他情况两种格式没有太大的区别

当类的构造函数只有一个参数时,可以直接赋值,将其他类型自动转换为类类型。反之不能自动转换,需要用户定义强制类型转换
任何一个接收唯一参数的构造函数都一个被用作转换函数。


  1. String类的构造函数只有一个char*参数,可以写作:
    String bean = “adg”;
  2. 如果该构造函数前使用了关键字:explicit。则该构造函数只能用于显式类型转换。
    String bean = String(“adg”);

转换函数必须是类方法,
转换函数不能指定返回类型
转换函数不能有参数
eg:operator double();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值