知识点:
1.两个不同位置的const的不同意义
2.形参有默认值的函数只能在类内给出,类外不能多余声明,即使默认值一样
3.创建一个临时对象调用的是构造函数而非默认的复制构造函数
4.重载的运算符可以当成普通运算符使用,但是要注意其本质是函数调用,要注意本体对象和传入参数的位置
- //例8-1_复数类加减法运算重载—成员函数形式
- #include
- using namespace std;
- //复数类定义
- class Complex {
- public:
- Complex(double r = 0.0, double i = 0.0);
- Complex operator+(const Complex& c2) const;
- Complex operator-(const Complex& c2) const;
- //函数的参数,是一个常量引用,表示该函数接受一个常量引用类型的 Complex 对象作为参数
- //const在函数声明的末尾表示这个函数是一个常量成员函数,即在这个函数中,不会修改对象的成员变量
- void display() const; //输出复数
- private:
- double real;
- double imag;
- };
-
- //构造函数
- Complex::Complex(double r /* = 0.0 */, double i /* = 0.0 */) :real(r), imag(i) {
- cout << "调用Complex构造函数" << endl;
- }
- //注意重载函数定义时的格式
- Complex Complex::operator+(const Complex& c2)const {
- //创建一个无名临时对象作为返回值
- return Complex(real + c2.real, imag + c2.imag);
- }
-
- Complex Complex::operator-(const Complex& c2)const {
- return Complex(real - c2.real, imag - c2.imag);
- }
- void Complex::display() const {
- cout << "(" << real << "," << imag << ")" << endl;
- }
-
- int main() {
- Complex c1(5, 4), c2(2, 10), c3;
- cout << "c1="; c1.display();
- cout << "c2="; c2.display();
- c3 = c1 - c2; //调用构造函数
- //c1 - c2 相当于函数调用 c1.operator-(c2)
- cout << "c3=c1-c2="; c3.display();
- c3 = c1 + c2; //正常引用
- //c1 + c2 相当于函数调用 c1.operator+(c2)
- cout << "c3=c1+c2="; c3.display();
- return 0;
- }
- // 输出
- 调用Complex构造函数
- 调用Complex构造函数
- 调用Complex构造函数
- c1=(5,4)
- c2=(2,10)
- 调用Complex构造函数
- c3=c1-c2=(3,-6)
- 调用Complex构造函数
- c3=c1+c2=(7,14)