C++运算符重载:以`cout<<`为例解析

需积分: 0 1 下载量 25 浏览量 更新于2024-07-14 收藏 420KB PPT 举报
"运算符重载在C++中的应用与实现" 在C++编程语言中,运算符重载是一项重要的特性,允许我们为已存在的运算符赋予新的意义,使其能够适用于自定义的数据类型,如类的对象。标题中的"cout<<c"涉及到的就是运算符流插入运算符"<<"的重载,这在输出自定义类的对象时非常常见。 在描述中,提到了"friend ostream& operator << (ostream&,Complex&);",这是一个友元函数,用来重载"<<"运算符,使得可以将`Complex`类的对象(假设`c3`是`Complex`类的一个实例)插入到输出流`cout`中。这个友元函数的定义如下: ```cpp ostream & operator << (ostream& output, Complex& c) { output << "(" << c.real << "+" << c.imag << "i)" << endl; return output; // 返回流对象以便连续插入其他信息 } ``` 在这个函数中,`output`参数代表输出流,`c`参数是`Complex`类的引用。通过这种方式,我们可以将复数对象的实部(`c.real`)和虚部(`c.imag`)以特定格式输出,并在末尾添加"i"表示虚部,最后返回流对象以支持链式调用。 运算符重载主要有两种方式:作为成员函数和作为友元函数。成员函数通常适用于需要访问类的私有或保护成员的情况,而友元函数则可以在不暴露内部细节的情况下操作对象。 在第10章中,会详细讨论以下内容: 1. 什么是运算符重载:解释了运算符重载的概念,即为已有的运算符赋予新的行为,使其可以应用于自定义类型。 2. 运算符重载的方法:介绍如何通过成员函数和友元函数来实现运算符重载。 3. 重载运算符的规则:包括运算符的返回类型、参数列表以及运算符的结合性和优先级等方面的规定。 4. 重载双目运算符和单目运算符:比如"+"、"-"、"*"、"/"以及"++"、"--"等的重载。 5. 重载流插入运算符"<<"和流提取运算符">>":主要用于I/O操作,如在标准输出流中输出类对象或从输入流读取数据。 6. 不同类型数据间的转换:在重载运算符时可能需要处理不同类型之间的转换,以确保运算的正确性。 通过运算符重载,我们可以使自定义类型的对象像内置类型一样自然地进行操作,提高了代码的可读性和效率。例如,在复数类中重载"+"运算符,使得`c3 = c1 + c2;`这样的语句能够直接进行复数的加法运算,无需编写额外的add()函数。这样,程序员可以使用熟悉的运算符表达复杂的逻辑,降低了学习和理解成本。

定义复数类Complex,包含实部r(double类型)、虚部i(double类型)两个数据成员。 (1)定义含默认参数值的构造函数Complex(double real=0.0, double image=0.0),使用户能够在构造对象的同时为对象赋初值。 (2)以函数成员的方式对复数的加法“+”、减法“-”、乘法“”三个二元运算符进行重载,以实现复数之间的加、减、乘功能。 (3)以友元函数的方式重载输出运算符“<<”,使得Complex类的对象能够显示其自身信息。 主函数main()中已提供了该类的相应测试代码。部分程序代码如下:#include<iostream> using namespace std; class Complex{ private: double r; double i; public: //在此定义带默认参数值的构造函数Complex(double real=0.0, double image=0.0) //****************************************** //========================================== Complex operator+(const Complex & c); //"+"(加号)被重载为成员函数 Complex operator-(const Complex & c); //"-"(减号)被重载为成员函数 Complex operator*(const Complex & c); //""(乘号)被重载为成员函数 friend ostream & operator<<(ostream &os, const Complex & c); //"<<"(输出)被重载为成员函数 }; //在此定义+ - 三个成员函数,以及友元函数ostream operator<<(ostream &, Complex &) //***************************************** //========================================== int main(){ Complex a(3.0, 4.0); Complex b(10.5, 20.5); Complex c; c = a+b; cout<<c<<endl; //c.print(); cout<<"---------------\n"; c=a-b; cout<<c<<endl; //c.print(); cout<<"---------------\n"; c=a*b; cout<<c<<endl; //c.print(); cout<<"---------------\n"; }

2023-05-30 上传