在 C 中使用成員變數作為預設參數
在 C 中,您可能需要將成員函數的參數設為可選。當沒有提供參數時,最好使用成員變數作為預設值。
考慮以下範例:
class Object { ... void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; };
程式碼嘗試將成員變數 initPos 指定為MoveTo函數中位置參數的預設值:
void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
但是,這種方法會導致編譯錯誤:
error: invalid use of non-static data member 'Object::initPos'
問題是成員函數的預設參數表達式必須僅依賴類或全域範圍元素。此外,必須在頭文件的方法聲明中定義預設參數。
要解決此問題,可以建立MoveTo 方法的兩個重載:
void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation here. }
MoveTo 方法採用單一參數呼叫具有兩個參數的MoveTo 方法,傳遞initPos 值作為預設值。
Object object; object.MoveTo(10.0); // Calls MoveTo(10.0, initPos)
此方法遵循透過允許 MoveTo 的實作僅定義一次來遵循 DRY 原則。
以上是如何在 C 成員函數中使用成員變數作為預設參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!