**結構:complex.h定義類。complex.cpp定義了成員函式。main.cpp驗證功能。
**的解釋全都嵌在**上了,只貼**:
complex.h:
#pragma once
namespace ns_complex ;
}
complex.cpp:
#include"complex.h"
#include namespace ns_complex
complex::complex(float x, float y)
complex::~complex()
void complex::reset()//重置清零操作
complex complex::operator + (const complex& a) const//'+'
complex complex::operator - (const complex& a) const//'-'
complex complex::operator * (const complex& a) const//'*'
complex complex::operator / (const complex& a) const//'/' 分子分母同時乘以分母的共軛,那麼分母會變成乙個常數,相當於分子的結果除以常數
complex complex::operator * (float a)//複數乘以常數,後置常數
complex operator * (const float a,const complex& a)//複數乘以常數,前置常數 注意這個函式並不是complex的成員函式
;//拷貝建構函式,我們不需要單獨定義,編譯器會幫我們自動生成乙個物件之間的淺拷貝的建構函式,這對於我們來說足夠用了.但是對於那種有一部分成員變數不需要複製的時候,需要用到第二種做法。
return b;
//第二種做法(無需宣告友元的方法):這種方法即使函式不是成員函式也可以。但是因為引數列表裡面的a是常,所以需要生成乙個非const變數return出去
complex c;
return c * a;
// 此種方法並不需要真正得把這個函式宣告為類的友元函式。
} complex complex::operator + (float a)//複數加常數
complex operator + (const float a, const complex& a)//常數加複數
;//拷貝建構函式,我們不需要單獨定義,編譯器會幫我們自動生成乙個物件之間的淺拷貝的建構函式,這對於我們來說足夠用了.但是對於那種有一部分成員變數不需要複製的時候,需要用到第二種做法。
return b;
//第二種做法:
complex c;
return c + a;
} complex complex::operator - (float a)//複數減常數
; }complex operator - (const float a, const complex& a)//常數減複數
;//拷貝建構函式,我們不需要單獨定義,編譯器會幫我們自動生成乙個物件之間的淺拷貝的建構函式,這對於我們來說足夠用了.但是對於那種有一部分成員變數不需要複製的時候,需要用到第二種做法。
return b;
//第二種做法:
complex c;
return -(c - a);//前面這個負號我要我們過載之後才能支援。千萬別按照數學的邏輯吧這個括號消除。哈
} complex complex::operator / ( const float a)//複數除以常數 記住這裡的返回值不能為引用
complex operator / (const float a, const complex& a)//常數除以負數
complex& complex::operator -()//複數取反 此運算子是前置的,所以括號中不需要引數,而this指標是隱含存在的
complex& complex::operator ~()//取共軛 此運算子是前置的,所以括號中不需要引數,而this指標是隱含存在的
void complex::show() const//展示複數
}
main.cpp:
// main.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include "complex.h"
#include using namespace std;
using namespace ns_complex;
int main()
;//列表初始化,此處如果不加f,那麼常數在儲存時預設為是double,編譯會報錯:double轉化為float是縮窄轉化
complex c = a + b;
c.show();
//減法測試
complex d;
complex e;//列表初始化
complex f = -(d - e);//包含了取反運算
f.show();
//乘法測試
complex j;//int可以轉化為float
complex h;//列表初始化
complex i = ~(10*j * h *10);//這裡面既包含了前置乘以常數,又包含了後置乘以常數。
i.show();
//除法測試
complex g;
complex k;//列表初始化
complex l = g / k;
l.show();
cin.get();
return 0;
}
運算結果:
[2.001,3.001]
[-5.000,-5.001]
[-500.000,-2501.000]
[5.308,-0.462]
這是乙個關於過載和友元的簡單例子。不過發現由於建構函式是引數為float的,但是直接寫complex(2.0,3.0)竟讓編譯報錯:無法從double縮窄成float,看來是由於常量2.0的儲存是double的形式,所以加乙個f來顯式的指出是float型別的。
複數(過載運算子 重寫ToString)
using system using system.collections.generic using system.linq using system.text 過載加號運算子 public static complex operator complex c1,complex c2 重寫結構com...
複數類 過載運算子2
定義乙個複數類complex,過載運算子 使之能用於複數的加法運算。參加運算的兩個運算量可以都是類物件,也可以其中有乙個是整數,順序任意。例如,c1 c2,i c1,c1 i均合法 設i為整數,c1,c2為複數 編寫程式,分別求兩個複數之和 整數和複數之和。兩個複數 乙個複數和乙個整數 乙個整數和乙...
2441複數類過載運算子
檔名稱 array.cpp 作 者 李中意 完成日期 2014 年7月 7 日 版本號 v1.0 輸入描述 無 include include using namespace std class complex complex double r,double i complex operator c...