C++面向對象程序設計(一)_複數類實現

參考視頻https://www.bilibili.com/video/BV1cb411B7fk?p=6
代碼如下:

//
// Created by zlc on 2020/3/28.

//data一定放在private裏面。
//參數儘可能使用pass by reference。//
//返回值儘可能使用return by reference。//
//在類的body中的函數,應該加const的要加const。//
//構造函數中的,儘量使用初始化列表initialization list
//

//防衛式聲明
#ifndef UNTITLED_COMPLEX_H
#define UNTITLED_COMPLEX_H
class complex;
class complex {
public:
    complex(double a=0,double b =0)
    :re(a),im(b) //初值列
    { }
    //函數在 class body 內定義完成,便自動 成為 inline 候選人
    //在類成員函數的聲明和定義中//const的函數不能對其數據成員進行修改操作。
    //const的對象,不能引用非const的成員函數。
    double real() const { return re;} //函數不需要改變裏面的值,加const
    double imag() const { return im;}
    //操作符重載
    complex& operator +=(const complex&);
private:
    double re,im;
    //對外宣稱這是個友元,可以取私有的data
    friend complex& __doapl(complex*,const complex&);
};
//右邊加到左邊,右邊不會變,所以加個const ,因爲左邊不是臨時變量,可以傳引用
//返回值是 complex& 會不會inline 看編譯器
inline complex&
complex::operator+=(const complex& r)
{
    return __doapl(this,r);
}
//非成員函數,全局函數
//因爲左邊是會變的,不用const
inline complex&
__doapl(complex* ths,const complex& r)
{
    ths->re += r.re;
    ths->im += r.im;
    return *ths; //這麼傳引用出去
}
//全局函數,返回complex類型,此處不能傳出引用,因爲是臨時對象
inline complex
operator + (const complex& x, const complex& y)
{
    //相當於構造出一個complex
    return complex(x.real()+y.real(),x.imag()+y.imag());
}
inline complex
operator + (const complex& x, double y)
{
    return complex(x.real()+y,x.imag());
}
inline complex
operator + (double x, const complex& y)
{
    return complex(x+y.real(), y.imag());
}
//輸出複數
//complex c1(9,8);
//cout << c1 << endl;
#include <iostream>
using namespace std;
inline ostream&  //返回的就是os 可以傳引用
operator <<(ostream& os, const complex& x)
{
    return os << '('<<x.real()<<","<<x.imag()<<'i'<<')';
}
#endif //UNTITLED_COMPLEX_H

main函數:

#include "complex.h"
int main() {
    complex c1(1,-1);
    complex c2;
    complex c3(12,34);
    double a = 12;
    c2+=c1;
    cout<< c3+a<<endl;
    cout<< c2 <<endl;
    cout<< c2+c3<<endl;
    return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章