C 函數重載與重寫:重載:同名函數有不同的參數類型或數量,編譯時選擇適當版本。重寫:衍生類別中與基底類別同名函數,覆蓋基底類別實現,提供衍生類別特定實作。重載特徵:參數類型或數量不同,編譯時綁定。重寫特徵:參數類型和數量相同,運行時綁定,需要繼承。
C 函數重載與重寫:概念與差異
重載
int sum(int a, int b); double sum(double a, double b);
重寫
class Base { public: virtual int add(int a, int b); }; class Derived : public Base { public: int add(int a, int b) override; };
區別
重載 | 重寫 | |
---|---|---|
公有或私有 | 公有或受保護 | |
不需要 | 需要 | |
#參數類型或數量不同 | 參數類型和數量相同 | |
編譯時 | 運行時 | |
同一類別內 | 基底類別與衍生類別中 |
重載:
計算不同類型數字的和#include <iostream>
using namespace std;
int sum(int a, int b) {
return a + b;
}
double sum(double a, double b) {
return a + b;
}
int main() {
cout << "整数之和:" << sum(1, 2) << endl;
cout << "浮点数之和:" << sum(1.5, 2.5) << endl;
return 0;
}
使用多態性計算各種形狀的面積 以上是C++ 函式重載與重寫有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!#include <iostream>
using namespace std;
class Shape {
public:
virtual double area() = 0; // 纯虚函数
};
class Rectangle : public Shape {
public:
Rectangle(double length, double width) : length(length), width(width) {}
double area() override {
return length * width;
}
private:
double length;
double width;
};
class Circle : public Shape {
public:
Circle(double radius) : radius(radius) {}
double area() override {
return 3.14 * radius * radius;
}
private:
double radius;
};
int main() {
Shape* shapes[] = {new Rectangle(5, 10), new Circle(4)};
for (int i = 0; i < 2; i++) {
cout << "面积:" << shapes[i]->area() << endl;
}
return 0;
}