在C++中,get
和set
方法通常用于訪問和修改類的私有或受保護成員變量。它們也被稱為getter和setter方法。雖然你可以在虛函數中使用這些方法,但這并不是最佳實踐。
在虛函數中,更推薦使用純虛函數(pure virtual function)來實現多態。純虛函數是在基類中聲明的虛函數,它沒有定義具體的實現,而是用= 0
表示。派生類必須提供純虛函數的具體實現。這樣,當使用基類指針或引用調用虛函數時,會根據對象的實際類型調用相應的實現。
例如,假設你有一個基類Shape
,其中包含一個純虛函數area()
:
class Shape {
public:
virtual double area() const = 0; // 純虛函數
};
然后,你可以創建不同的派生類,如Circle
和Rectangle
,分別實現area()
函數:
class Circle : public Shape {
public:
Circle(double radius) : radius_(radius) {}
double area() const override {
return 3.14159 * radius_ * radius_;
}
private:
double radius_;
};
class Rectangle : public Shape {
public:
Rectangle(double width, double height) : width_(width), height_(height) {}
double area() const override {
return width_ * height_;
}
private:
double width_;
double height_;
};
這樣,當你使用基類指針或引用調用area()
函數時,會根據對象的實際類型調用相應的實現:
Shape* shape = new Circle(5.0);
std::cout << "Area: " << shape->area() << std::endl; // 輸出圓的面積
delete shape;
shape = new Rectangle(4.0, 6.0);
std::cout << "Area: " << shape->area() << std::endl; // 輸出矩形的面積