static.cpp檔案:
#include
#include "employ1.h"
using namespace std;
int main()
employ1.h檔案:
#ifndef employ1_h
#define employ1_h
class employee
;#endif
employ1.cpp檔案:
#include
#include
#include
#include "employ1.h"
using namespace std;
int employee::count = 0;
int employee::getcount()
employee::employee( const char *first, const char *last )
employee::~employee()
const char *employee::firstname() const
const char *employee::lastname() const
軟體工程知識:有些公司的軟體工程標準中,明確規定所有表態成員函式只能呼叫類名句柄,不能呼叫物件控制代碼。
常見程式設計錯誤:在靜態成員函式中引用this指標是語法錯誤。
常見程式設計錯誤:將靜態成員函式宣告為常量是語法錯誤。
軟體工程知識:即使類物件尚未初始化類的靜態資料成員和成員函式也可以已經存在並可使用。
良好程式設計習慣:刪除動態分配記憶體後,將指向該記憶體的指標設定為指向0,以切斷指標與前面已分配內豐存的連線。
注意,employee的建構函式使用了assert(斷言)。assert類巨集在cassert標頭檔案中定義,用以測試條件值。如果表示式的值為false,assert就會發出錯誤資訊,並呼叫abort函式(在常用工具程式標頭檔案中)中止程式執行。這是個有用的除錯工具,可以測試變數是否有正確值。注意,函式abort不執行任何析構函式即可中止程式執行。
在這個程式中,assert用於確定new操作符能否滿足動態分配記憶體的請求。例如,在employee建構函式中,語句(也稱為斷言):
assert( firstname != 0 );
用於測試指標 firstname,確定其是否不等於0。如果上述assert中的條件為true,程式將繼續執行,不補中斷。如果上述assert中的條件為false,程式就會列印出一條錯誤資訊,包括行號、測試條件和assert所在的檔名,然後程式中止。程式設計師可以從這個**中找出錯誤。
assert不一定要在除錯完成後刪除。程式不再用assert進行除錯時,只須在程式檔案開頭(通常可以在編譯器選項中指定)插入語句
#define ndeeug
這時預處理程式會忽略所有斷言,無須程式設計師手工刪除各條斷言。
C 物件的靜態型別與動態型別
在c 當中 因為出現了繼承 繼承導致物件的指標和引用具有兩種不同的型別 靜態型別 和 動態型別 靜態型別 指標或者是引用宣告時的型別。動態型別 由他實際指向的型別確定。class base class derived public base base base base的靜態型別是 base new...
C 物件的靜態型別與動態型別
由於繼承導致物件的指標和引用具有兩種不同的型別 靜態型別和 動態型別。靜態型別 指標或者是引用宣告時的型別。動態型別 由他實際指向的型別確定。例如 gameobject pgo pgo靜態型別是 gameobject new spaceship 動態型別是 spaceship asterioid p...
C 物件的靜態型別和動態型別
由於繼承導致物件的指標和引用具有兩種不同的型別 靜態型別和動態型別。靜態型別 指標或者是引用宣告時的型別。動態型別 由實際指向的型別確定。gameobject pgo new spaceship pgo 靜態型別是 gameobject 動態型別是 spaceship asterioid pa ne...