C++ primer plus 阅读记录-使用类

1 运算符重载
需使用被称为运算符函数的特殊函数形式:
operator op(argument-list)

重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。
不能创建新运算符。

只能通过成员函数进行重载的运算符:
= ( ) [ ] ->

2. 友元
通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。

创建友元函数的第一步是将其原型放在类声明中,并在原型声明前加上关键字friend;第二步是编写函数定义,不要使用类::限定符,不要在定义中使用关键字friend。

3.随机数
头文件cstdlib包含了srand()和rand()的原型,而ctime包含了time()的 原型。
使用举例:
srand(time(0));
int a = rand() % 360;

4.类的自动转换和强制类型转换
只接受一个参数的构造函数定义了从参数类型到类类型的转换。如果使用关键字explicit限定了这种构造函数,则它只能用于显示转换,否则也可以用于隐式转换。

Stonewt(double lbs);

Stonewt myCat;
myCat = 19.6; //隐式转换

上面介绍利用构造函数将数字转换为Stonewt对象,那么是否可以将Stonewt对象转换为double值呢?
答案是可以这样做,必须使用特殊的C++运算符函数–转换函数
operator typeName();
1)转换函数必须是类方法;
2)转换函数不能指定返回类型;
3)转换函数不能有参数;
如: operator double( );

练习:
这里写图片描述

//complex0.h
#ifndef COMPLEX0_H_
#define COMPLEX0_H_

class complex
{
private:
    double real;
    double imag;
public:
    complex();
    complex(double, double b=0.0);
    ~complex();
    complex operator+(const complex& ) const;
    complex operator-(const complex& ) const;
    complex operator*(const complex& ) const;

    friend complex operator*(double, const complex&);
    friend std::ostream& operator<<(std::ostream&, const complex&);
    friend std::istream& operator>>(std::istream&, complex&);

};

#endif

这里写图片描述

这里写图片描述

发现一个有趣的现象:即输入cin会按Enter敲回车,导致显示输出换行。再cout就会在下一行输出。
查看相关问题,有人指出输入是带回显的!
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值