三、介面與實現
四、隨機數庫的設計
參考函式
功能abs(x)
返回x的絕對值
sqrt(x)
返回x的平方根
floor(x)
返回小於或等於浮點數x的最大整數值
ceil(x)
返回大於或等於浮點數x的最小整數值
exp(x)
返回x的指數函式值 e^x
log(x)
返回x的自然對數值
log10(x)
返回x的常用對數值
pow(x,y)
返回x的y次方的值
cos(theta)
返回角θ的余弦值,θ為弧度,可用θ*π/180轉換為度
sin(theta)
返回弧度θ的正弦值
tan(theta)
返回弧度θ的正切值
atan(x)
返回弧度θ的反正切值
atan2(y,x)
返回x軸與原點和點(x,y)所形成的直線的夾角的弧度值
**如下:
#include
#include
void
error
(string msg)
定義c++庫,首先定義介面,它讓庫使用者在不了解庫實現細節情況下使用庫中函式;其次定義庫具體實現,說明庫的底層實現細節。定義介面檔案字尾名 .h,定義實現檔案字尾名 .cpp 。
error庫介面:
#ifndef _error_h
// 指令檢查 _error_h 是否已被定義
#define _error_h
void
error
(std::string msg)
;#endif
}
error庫實現:
#include
#include
#include
#include
"error.h"
using
namespace std;
void
error
(string msg)
以direction型別編碼四個方向為例 enum direction
direction庫的介面:
#ifndef _direction_h
#define _direction_h
#include
enum direction
;direction leftfrom
(direction dir)
;direction rightfrom
(direction dir)
;std::string directiontostring
(direction dir)
;#endif
direction庫的實現:
#include
#include
"direction.h"
using
namespace std;
direction leftfrom
(direction dir)
direction leftfrom
(direction dir)
string directiontostring
(direction dir)
}
如果為了能從介面中匯出常量 pi ,需要在其介面的常量定義宣告和原型中都都加上關鍵字 extern 。
gmath庫簡化的介面:
#ifndef _gmath_h
#define _gmath_h
extern
const
double pi;
double
sindegrees
(double angle)
;double
cosdegrees
(double angle)
;double
todegrees
(double radians)
;double
toradians
(double degrees)
;#endif
gmath庫的實現:
#include
#include
"gmath.h"
extern
const
double pi =
3.1415926
;double
sindegrees
(double angle)
double
cosdegrees
(double angle)
double
todegrees
(double radians)
double
toradians
(double degrees)
類庫提供了函式 rand,其原型為: int rand() ;
返回結果為 0 ~ rand_max 之間任意整數,rand_max 通常定義為整形最大值。
random.h 使用者期望功能:
從乙個特定的區域內選取隨機整數
從乙個特定區域內選取隨機實數
以某個特定概率模擬乙個隨機事件
據此隨機數庫介面如下:
#ifndef _random_h
#define _random_h
intrandominteger
(int low,
int high)
;double
randomreal
(double low,
double high)
;// [low, high)
bool
randomchance
(double p)
;void
setrandomseed
(int seed)
;#endif
利用 rand() 函式,對值進行規範化、量化、翻譯、轉換為整數的處理。
考慮隨機數種子,及一系列複雜情況,隨機數庫實現如下:
#include
#include
#include
#include
"random.h"
using
namespace std;
void
initrandomseed()
;int
randominteger
(int low,
int high)
double
randomreal
(double low,
double high)
bool
randomchance
(double p)
void
setrandomseed
(int seed)
void
initrandomseed()
}
學習記錄,便於以後查閱
《c++程式設計 基礎變成抽象與演算法策略》 eric s.roberts 機械工業出版社
C 呼叫C 動態鏈結庫中的函式指標與函式指標結構
c 呼叫c 動態鏈結庫中的函式指標與函式指標結構 http www.dreamdu.com blog 2008 04 25 cs cpp functionpointer 這幾天做專案時,遇到了c 呼叫c 函式指標的問題,c 呼叫c dll中的函式很簡單,函式指標還真沒調過,看了幾篇文章研究了會兒後把...
C 靜態庫與動態庫
感覺比較形象,就摘過來了.這次分享的 宗旨是 讓大家學會建立與使用靜態庫 動態庫,知道靜態庫與動態庫的區別,知道使用的時候如何選擇。這裡不深入介紹靜態庫 動態庫的底層格式,記憶體布局等,有興趣的同學,推薦一本書 程式設計師的自我修養 鏈結 裝載與庫 庫是寫好的現有的,成熟的,可以復用的 現實中每個程...
C 靜態庫與動態庫
庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll 所謂靜態 動態是指鏈結。回顧一下,將乙個程...