C++ 復(fù)數(shù)

2023-03-20 16:49 更新

本章后面的部分講述復(fù)數(shù)這樣一個例子。復(fù)數(shù)在數(shù)學(xué)和工程領(lǐng)域很有用途,許多計算用到了復(fù)數(shù)。一個復(fù)數(shù)是實部和虛部之和,記作x+yi,x為實部,y為虛部,i是-1的平方根。
以下為類Complex的定義:

class Complex 
{ 
        double real, imag; 

public: 
        Complex () { } 
        Complex (double r, double i) { real = r; imag = i; } 
}; 

在類的定義中,實部和虛部是私有的,構(gòu)造函數(shù)是公有的,故加上public標號。
一般使用這樣兩個構(gòu)造函數(shù):一個沒有參數(shù)也不做什么工作的構(gòu)造函數(shù),另一個有兩個參數(shù)來用來初始化變量。
到現(xiàn)在為止,還看不到將變量私有化的明顯優(yōu)點。讓我們把程序復(fù)雜一點,就能看到了。
對于復(fù)數(shù),通常會有另外一種表達方式叫做基于極坐標系的極坐標表示。跟用復(fù)數(shù)域上的點的特定位置表示實部虛部不同,極坐標系中用離開原點的距離(或模)和偏離原點的方向(或角度)來表示。
下圖表示兩個坐標系系統(tǒng)。

在極坐標系中,復(fù)數(shù)記作reiθ ,其中r是模(半徑),θ是用弧度表示的角度。
幸運的是,很容易從兩個坐標系中進行轉(zhuǎn)換。
從笛卡爾到極坐標系:
r = x2 + y2
θ = arctan(y/x)
從極坐標系到笛卡爾坐標系:
x = r cos θ
y = r sin θ
那么我們應(yīng)該使用哪一種表達方式呢?因為有些操作在笛卡爾坐標系中簡單些,如加法;而另一些操作在極坐標系中簡單些,如乘法。所以一個辦法是我們寫一個使用兩種表達方式的類,讓他們根據(jù)需要可以自動轉(zhuǎn)換。

class Complex 
{ 
        double real, imag; 
        double mag, theta; 
        bool cartesian, polar; 
public: 
        Complex () { cartesian = false; polar = false; } 
        Complex (double r, double i) 
        { 
                real = r;  imag = i; 
                cartesian = true; polar = false; 
        } 
};   

在這個類中有6個變量,這就意味著這樣會比之前的任何一種占用的空間都要多。不過我們很快就會看到這樣做是很有用的。
其中四個變量可以根據(jù)名字判斷他們的意思,分別是一個復(fù)數(shù)的實部,虛部,角度,半徑。另外兩個變量cartesian和polar則是表示對應(yīng)坐標系的值是否有效的標志。
舉例來說,啥都不做的這個構(gòu)造函數(shù)將兩個標志量設(shè)置為false表明該對象無論哪種表達方式,都還不是有效的復(fù)數(shù)。
第二個構(gòu)造函數(shù)使用參數(shù)來初始化實部和虛部,但不會計算模或角度。并會把極坐標的標志位置為false來警告其他函數(shù)不應(yīng)當(dāng)訪問?;蚪嵌戎担钡剿麄儽辉O(shè)置為正確的值。
現(xiàn)在應(yīng)該清楚為何將變量置為私有了吧。如果一個客戶程序被允許不受限制的訪問,讀取了未初始化的值就很容易導(dǎo)致出錯。在下一部分,我們將添加一些訪問函數(shù)來避免這種錯誤。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號