Qwt原始碼解讀之QwtPoint3D類

2021-06-13 18:57:37 字數 1746 閱讀 9950

qwtpoint3d 表徵二維座標系中的乙個三維點(x, y, z)。

**分析:

1、類介面定義:

class qwt_export qwtpoint3d

;

qwtpoint3d類是乙個很簡單的資料類,沒有什麼難點,但是如果要我們自己去定義的話,不一定能寫得如作者這樣完美。例如,

1) 提供了 isnull() 介面。

/*!

returns true if the point is null; otherwise returns false.

a point is considered to be null if x, y and z-coordinates

are equal to zero.

*/inline bool qwtpoint3d::isnull() const

2) 介面全部實現為內聯函式,從而保證了效率優化。

3) 提供了訪問成員變數引用的介面:

double &rx();

double &ry();

double &rz();

當然,不知道作者提供這組介面的用意何在?因為qwtpoint3d類中的成員變數都為基本資料型別,這樣設計無益於效率優化。

通常情況下,就我個人觀點,不推薦使用這組介面,應該使用

double x() const;

double y() const;

double z() const;

代替。4) 提供了轉換函式 qpointf topoint() const; 與建構函式 qwtpoint3d( const qpointf &other ); 形成對應的反向轉換功能。

5) 過載了==(等於)和 != (不等於)操作符:

//! returns true if this point and other are equal; otherwise returns false.

inline bool qwtpoint3d::operator==( const qwtpoint3d &other ) const

//! returns true if this rect and other are different; otherwise returns false.

inline bool qwtpoint3d::operator!=( const qwtpoint3d &other ) const

「不等於」操作符通常用「等於」操作符來實現,當然,反之亦可。

不過,這裡(包括1)有一點疑問,就是關於浮點數的比較?

return

d_x==

0.0&&

d_y==

0.0&&

d_z==

0;

return

(d_x

==other.d_x

)&&(

d_y==other.d_y

)&&(

d_z==other.d_z

);

這裡直接對兩個雙精度浮點數進行相等比較。

相信林銳博士的《高質量程式設計指南——c/c++》很多人都讀過,那本書裡針對這個問題專門進行過討論?求解!

Qwt原始碼解讀之QwtInterval 類

qwtinterval 類表徵乙個區間,這個區間由兩個double型別的上限值max和下限值min所表示。它可以表示 min,max min,max min,max 和 min,max 等4種情況。分析 cpp view plain copy class qwt export qwtinterval...

metaq原始碼解讀之FetchManager

fetchmanager 請求管理器介面。既然是管理器,就需要知道管理的物件是什麼?fetchrequest 管理的是一次次的請求。既然是管理器,就需要給被管理者提供容所?fetchrequestqueue 請求delay queue。既然是管理器,就需要有管理實施者?fetchrequestrun...

Opencv 原始碼解讀之 ImageEncoder

imagedecoder類 imagedecoder這個類,這個類其實就是乙個影象資料的解析類。且看下面的源 class baseimagedecoder 這就是我們要找的imagedecoder類 int width const int height const int type const vi...