函數重載允許在同一作用域內定義同名函數,但要求參數列表不同;而函數重寫允許在派生類中定義與基類同名、同參數列表的函數,要求帶有 override 關鍵字,返回類型和參數列表與基類函數完全相同。重載示例:print(int),print(double);重寫示例:derived 類中的 foo() 重寫了 base 類中的 foo()。
C++ 語言標準對函數重載和重寫的規范
函數重載
重載允許在同一個作用域內使用相同名稱定義多個函數,但其參數列表必須不同。C++ 語言標準要求函數重載遵循以下規范:
返回類型必須相同。
參數列表必須不同,即參數的數量、類型或順序。
const、volatile 和引用限定符可以被用來區分重載的函數。
示例:
void print(int x); void print(double x);
登錄后復制
函數重寫
重寫允許在派生類中定義一個與基類中同名同參數列表的函數。C++ 語言標準要求函數重寫遵循以下規范:
重寫函數必須帶有 override 關鍵字。返回類型必須與基類函數相同。參數列表必須與基類函數完全相同(包括類型、順序和限定符)。派生類函數不得比基類函數的訪問權限更低(即 protected 只能重寫 protected 或 public 函數)。
示例:
class Base {
public:
virtual void foo();
};
class Derived : public Base {
public:
override void foo() override; // 重寫基類中的 foo
};
登錄后復制
實戰案例
函數重載:
#include <iostream>
using namespace std;
void print(int x) {
cout << "int: " << x << endl;
}
void print(double x) {
cout << "double: " << x << endl;
}
int main() {
print(10); // 調用 int 版本的 print
print(3.14); // 調用 double 版本的 print
return 0;
}
登錄后復制
函數重寫:
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw() = 0; // 純虛函數
};
class Rectangle : public Shape {
public:
void draw() override {
cout << "Drawing a rectangle" << endl;
}
};
int main() {
Rectangle r;
r.draw(); // 調用 Rectangle 類中的重寫函數
return 0;
}
登錄后復制






