派生類重寫虛函數不是普通重載,必須滿足:
#include <iostream>
using namespace std;
class Figure {
public:
void set(double a=0, double b=0) { x=a; y=b; }
virtual void show_area() {
cout << "No area computation defined\n";
}
protected:
double x, y;
};
class Triangle : public Figure {
public:
void show_area() override {
cout << "Triangle: " << 0.5*x*y << '\n';
}
};
class Rectangle : public Figure {
public:
void show_area() override {
cout << "Rectangle: " << x*y << '\n';
}
};
class Circle : public Figure {
public:
void show_area() override {
cout << "Circle: " << 3.14*x*x << '\n';
}
};
int main() {
Figure* f;
Triangle t; Rectangle r; Circle c;
f = &t; f->set(10,5); f->show_area(); // 25
f = &r; f->set(10,5); f->show_area(); // 50
f = &c; f->set(10); f->show_area(); // 314
}
虛函數是 C++ 面向對象多態的基石,理解其底層機制有助於編寫高效、正確的多態代碼。