先解释虚函数,对于基类,子类继承基类后可能会调用其某个函数FA,而不同的子类继承了同一个基类后需要基类内某个同样的函数FA但又不是同个作用,此时则会在对应的子类内对应重载派生出FA_B函数和FA_C函数,而这时要求FA为虚函数(virtual)
那为什么不各自写成一个函数B和C呢?这就是多态的意义
对于基类A和子类B,C有
B b; C c; A *ab = &b; A *ac = &c;
则基类指针指向子类,此时调用其内函数
ab->FA; ac->FA;
虽然是同一个类的同一个函数,但是其效果不一致,这就是多态,即规范了写法又实现灵活的功能。
用法:
基类内虚函数前缀virtual,纯虚函数则以const=0结尾,必须重载功能才有具体意义;而非纯虚函数则是先定义好功能,子类可选择性进行重载。
完整代码参考
#include <iostream> // 形状的基类 class Shape { public: virtual double calculateArea() const = 0; }; // 矩形类 class Rectangle : public Shape { private: double length; double width; public: Rectangle(double l, double w) : length(l), width(w) {} double calculateArea() const override { return length * width; } }; // 圆类 class Circle : public Shape { private: double radius; public: Circle(double r) : radius(r) {} double calculateArea() const override { return 3.14 * radius * radius; } }; int main() { Rectangle rectangle(5, 4); Circle circle(3); Shape* shape1 = &rectangle; Shape* shape2 = &circle; // 通过基类指针调用不同对象的函数 std::cout << "Area of rectangle: " << shape1->calculateArea() << std::endl; std::cout << "Area of circle: " << shape2->calculateArea() << std::endl; return 0; }
标签:子类,函数,double,多态,C++,FA,virtual,基类,public From: https://www.cnblogs.com/toriyung/p/17456339.html