/*條款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方法,父類指標指向子類物件,呼叫...