《C++程序设计》笔记之-运算符重载

来源:互联网 发布:ip端口绑定域名 编辑:程序博客网 时间:2024/04/30 21:39

运算符重载实际上是函数的重载

函数类型   operate   运算符名称  (形参表)

Complex   operate +  (Complex &c2)     


不能重载的运算符5个:  sizeof  、       .(成员访问运算符)、      *(成员指针访问运算符)、        ::域运算符、        ?:条件运算符


1、重载不能改变操作对象个数

2、重载不能改变优先级原则

3、重载不能改变运算符结合性(左结合或右结合)

4、函数参数至少有一个是类对象或其引用,不能全是标准类型

Vc++提供的不带后缀.h 的头文件不支持把运算符重载函数作为友元函数,老版本带.h的头文件支持。gcc都支持

究竟把运算符重载函数作为类的成员函数好,还是友元函数好?  参考标准:         (友元会破坏封装,尽量用成员函数)

复制运算符=、  下标运算符[ ]、函数调用运算符()、成员运算符->、 必须作为成员函数

流插入<< 和流提取 >>只能作为友元函数

一般将单目运算符和复合运算符重载为成员函数,将双目运算符重载为友元函数


重载插入流<< 和提取流>>

istream &  operate >>(istream &,  自定义类 &);

ostream &operate << (ostream &,自定义类 &);


friend ostream  & operate << (ostream  &, Complex &);

ostream & operate << (ostream & output, Conplex &c)

{

output << c.real<< "+" << c.image<<"i";   //重载输出复数

return output;                                                   //cout通过地址传给output,也即返回cout

}

cout<<c3<<c2;       //先执行cout<< c3    第一个参数和函数类型必须是ostream类型的引用,就是为了连续输出


重载运算符只能作用于一个指定类,不是应用于所有类



强制类型转换:          类型名(数据)  int (9。2)

  int i =6;

i = 7.5 + i;  //i先转换为double型,得到的结果再转化为int型



转换构造函数:将一个其他类型数据转化为类的对象。只有一个形参、

默认构造函数:Complex();

用于初始化的构造函数;Complex(int,a int b);

用于复制对象的构造函数:Complex(Complex &c);   //形参为本类对象的引用

转换构造函数:Complex(int  a){real = a;  image = 0;}    //将int型参数a转化为类对象

c = c1 +Complex(1)

也可以将一个类转化为构造函数所在类

Teacher(Student &s){num = s.num;  strcpy(name,s.name);sex = s.sex;}    //将学生类对象转化为teacher类对象

s中name、num、sex必须为公用成员,否则不能被类引用


类型转化函数:将一个类的对象转化为另一个类型数据

operate  类型名() { }

      operate double()   {return real;}             函数名为operate double     和运算符重载一样operate +

类型转化函数只能作为成员函数,不能作为友元函数

原创粉丝点击