函數(shù)重載和重寫的異同點(diǎn):相同點(diǎn):提供函數(shù)的多組變體,名稱重用簡(jiǎn)化代碼。不同點(diǎn):作用域:重載在同一作用域,重寫在不同作用域。參數(shù)或返回類型:重載參數(shù)類型不同,重寫允許參數(shù)類型或返回類型不同。目的:重載擴(kuò)展功能,重寫定制或覆蓋父類方法。
C++ 函數(shù)重載與重寫的異同分析
函數(shù)重載
定義:具有相同名稱但不同參數(shù)類型的多個(gè)函數(shù)。
特性:
參數(shù)類型不同,從而實(shí)現(xiàn)相同功能的多組變體。
發(fā)生在同一作用域內(nèi)。
代碼示例:
#include <iostream>
using namespace std;
// 求面積函數(shù),重載為正方形和圓形
double area(double side) {
return side * side;
}
double area(double radius) {
return 3.14 * radius * radius;
}
int main() {
cout << "正方形面積: " << area(5) << endl;
cout << "圓形面積: " << area(3) << endl;
}
登錄后復(fù)制
函數(shù)重寫
定義:子類中定義的函數(shù)名稱與父類相同,但參數(shù)類型或返回類型不同。
特性:
重寫父類的方法,提供子類的特有實(shí)現(xiàn)。發(fā)生在派生類中,父類和子類處于不同的作用域。代碼示例:
#include <iostream>
using namespace std;
class Shape {
public:
virtual double area() {
return 0;
}
};
class Rectangle : public Shape {
public:
double height, width;
Rectangle(double height, double width) {
this->height = height;
this->width = width;
}
double area() override {
return height * width;
}
};
class Circle : public Shape {
public:
double radius;
Circle(double radius) {
this->radius = radius;
}
double area() override {
return 3.14 * radius * radius;
}
};
int main() {
Rectangle rectangle(5, 3);
Circle circle(3);
cout << "長(zhǎng)方形面積: " << rectangle.area() << endl;
cout << "圓形面積: " << circle.area() << endl;
}
登錄后復(fù)制
異同對(duì)比
相同點(diǎn):
都可以提供函數(shù)的多組變體。
使用名稱重用性來(lái)簡(jiǎn)化代碼。
不同點(diǎn):
作用域:函數(shù)重載發(fā)生在同一作用域內(nèi),而函數(shù)重寫發(fā)生在不同的作用域內(nèi)(父類和子類)。
參數(shù)或返回類型:函數(shù)重載的參數(shù)類型不同,而函數(shù)重寫允許參數(shù)類型或返回類型不同。
目的:函數(shù)重載主要用于擴(kuò)展現(xiàn)有功能,而函數(shù)重寫用于定制或覆蓋父類的方法。
實(shí)戰(zhàn)案例
在GUI應(yīng)用程序中,控件往往具有相同的功能(如設(shè)置文本或背景色),但不同的輸入?yún)?shù)(如字符串或顏色對(duì)象)。在這種情況下,函數(shù)重載可以簡(jiǎn)化API,減少代碼重復(fù)性。
在面向?qū)ο蟮膽?yīng)用程序中,重寫可以實(shí)現(xiàn)多態(tài)性。子類可以提供不同的方法實(shí)現(xiàn),同時(shí)保持繼承父類的接口,從而實(shí)現(xiàn)代碼的可擴(kuò)展性和靈活性。






