在C++中,類方法的重載(Overloading)和覆蓋(Overriding)是兩個不同的概念。重載是指在同一個類中定義多個同名的成員函數,但它們的參數列表不同;覆蓋是指在派生類中重新定義基類中的虛函數。以下是關于這兩個技巧的一些建議:
示例:
class MyClass {
public:
void print(int a) {
cout << "Print int: " << a << endl;
}
void print(double b) {
cout << "Print double: " << b << endl;
}
void print(string s) {
cout << "Print string: " << s << endl;
}
};
virtual
聲明)。
c. 派生類中覆蓋的函數原型必須與基類中的虛函數原型相同(返回值類型、函數名、參數列表都相同)。
d. 派生類中覆蓋的函數可以是公有、保護或私有的,但通常應該與基類中的虛函數具有相同的訪問權限。
e. 如果派生類中沒有覆蓋基類中的虛函數,那么派生類對象調用該函數時將執行基類中的版本。示例:
class Base {
public:
virtual void show() {
cout << "Base class show()"<< endl;
}
};
class Derived : public Base {
public:
void show() override { // 使用override關鍵字明確表示覆蓋
cout << "Derived class show()"<< endl;
}
};
總結:重載是同一個類中同名函數的不同實現,而覆蓋是派生類對基類虛函數的重新實現。在實際編程中,合理地使用這兩種技巧可以提高代碼的可讀性和可維護性。