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

2023-03-20 16:49 更新

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

class Complex 
{ 
        double real, imag; 

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

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

在極坐標(biāo)系中,復(fù)數(shù)記作reiθ ,其中r是模(半徑),θ是用弧度表示的角度。
幸運(yùn)的是,很容易從兩個(gè)坐標(biāo)系中進(jìn)行轉(zhuǎn)換。
從笛卡爾到極坐標(biāo)系:
r = x2 + y2
θ = arctan(y/x)
從極坐標(biāo)系到笛卡爾坐標(biāo)系:
x = r cos θ
y = r sin θ
那么我們應(yīng)該使用哪一種表達(dá)方式呢?因?yàn)橛行┎僮髟诘芽栕鴺?biāo)系中簡(jiǎn)單些,如加法;而另一些操作在極坐標(biāo)系中簡(jiǎn)單些,如乘法。所以一個(gè)辦法是我們寫(xiě)一個(gè)使用兩種表達(dá)方式的類(lèi),讓他們根據(jù)需要可以自動(dòng)轉(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; 
        } 
};   

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)