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

来源:互联网 发布:联影 算法怎么样 编辑:程序博客网 时间:2024/06/01 22:25

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
原创粉丝点击