條款37 絕不重新定義繼承而來的預設引數值

2021-09-30 12:25:16 字數 821 閱讀 4700

/*條款37:絕不重新定義繼承而來的預設引數值*/

/*靜態繫結就是在程式中被宣告時所採用的型別*/

#includeusing namespace std;

/*class shape ;

virtual void draw(shapecolor color = red)const = 0;

};class rectangle :public shape

//這裡賦予不同預設引數值 too bad!!

};class circle :public shape

//如果呼叫此函式時,一定要指定引數,因為靜態繫結這個函式並不從其基類中繼承預設引數值,但以指標或引用呼叫,可以不指定引數值,因為動態繫結下這個函式會從其基類繼承預設引數值

};*/

// 第24行問題的解決方法 nvi手法

class shape ;

void draw(shapecolor color = red)const

private:

virtual void dodraw(shapecolor color)const = 0;

};class rectangle :public shape //這裡無須指定預設引數值,而且預設引數總為red ,更改基類預設無需更改子類預設

};class circle :public shape

//如果呼叫此函式時,一定要指定引數,因為靜態繫結這個函式並不從其基類中繼承預設引數值,但以指標或引用呼叫,可以不指定引數值,因為動態繫結下這個函式會從其基類繼承預設引數值

};int main()

條款37 絕不重新定義繼承而來的預設引數值

乙個用於描述幾何形狀的class class shape 所有形狀都必須提供乙個函式,繪出自己 virtual void draw shapecolor color red const 0 class rectangle public shape class circle public shape ...

條款37 絕不要重新定義繼承而來的預設引數值

總結 不要重新定義乙個繼承而來的預設引數值,因為 預設引數值是靜態繫結 而virtual函式 你唯一應該覆寫的東西 是動態繫結。我們應該知道,virtual函式是動態繫結 dynamically bound 預設引數值卻是靜態繫結 statically bound 物件的靜態型別 static ty...

37 絕不重新定義繼承而來的預設引數值

1 由於絕不重新定義繼承而來的non virtual方法,現只考慮帶有預設引數值的virtual方法。2 為什麼絕不重新定義繼承而來的預設引數值?預設引數值是靜態繫結,virtual方法是動態繫結。現在考慮父類virtual方法帶有預設引數值,子類重寫了virtual方法,父類指標指向子類物件,呼叫...