首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

高品質 C++/C 程式設計指南 第 8 章 (二):重載函數二義性與成員函數重載/覆寫/隱藏辨析

     編輯:關於C++

8.1.3 隱式型別轉換引發重載二義性

void output(int x);
void output(float x);

output(1);   // ✅ 呼叫 int 版
output(1.0f); // ✅ 呼叫 float 版
output(0.5);  // ❌ 編譯錯誤:0.5 是 double,轉 int 或 float 皆可,編譯器無法決策

// 顯式轉型消除二義性
output(static_cast(0.5));    // output int 0
output(static_cast(0.5));  // output float 0.5

**隱式轉換雖便利,卻是二義性溫床**。關鍵呼叫處**務必顯式轉型**。

8.2 成員函數三概念辨析表

特徵重載覆寫隱藏
範圍同一類別派生類 vs 基類派生類 vs 基類
函數名相同相同相同
參數不同相同同或不同
virtual可有可無基類**必須有**無關
關係平行取代屏蔽

範例:重載與覆寫共存

class Base {
public:
    void f(int x) { cout << "Base::f(int) " << x; }
    void f(float x) { cout << "Base::f(float) " << x; } // 重載
    virtual void g() { cout << "Base::g()"; }
};

class Derived : public Base {
public:
    virtual void g() { cout << "Derived::g()"; } // 覆寫
};

Derived d;
Base* pb = &d;
pb->f(42);      // Base::f(int) 42
pb->f(3.14f);   // Base::f(float) 3.14
pb->g();        // Derived::g()  多態生效

**重載**解決「同類別不同參數」;**覆寫**實現「多態替換」;**隱藏**是**陷阱**,須主動破解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved