Home > Article > Backend Development > The secret of C++ virtual functions revealed
Virtual functions use dynamic binding to determine the function to be called at runtime to achieve polymorphism. Its advantages include scalability and reusability, but it also introduces overhead and complexity. Virtual functions are often used to implement methods of different types of objects in a uniform way.
Virtual functions are a powerful tool in C that allow you to create methods that can be overridden by derived classes. This means you can write base class code and then customize it as needed in the derived classes.
Virtual functions use a technology called dynamic binding (also known as late binding). Unlike static binding (also known as early binding), which determines the function to be called at compile time, dynamic binding is determined at runtime.
This means that when you call a virtual function, the compiler generates a pointer to the virtual function table. This table contains pointers to functions implemented by each derived class. At run time, this pointer is used to select the function to call.
Advantages of virtual functions include:
Virtual functions also have some disadvantages, including:
class Shape { public: virtual double area() = 0; // 纯虚函数 virtual double perimeter() = 0; // 纯虚函数 }; class Circle : public Shape { public: Circle(double radius) : _radius(radius) {} double area() override { return M_PI * _radius * _radius; } double perimeter() override { return 2 * M_PI * _radius; } private: double _radius; }; class Square : public Shape { public: Square(double side) : _side(side) {} double area() override { return _side * _side; } double perimeter() override { return 4 * _side; } private: double _side; }; int main() { Shape* shapes[] = { new Circle(5), new Square(3) }; for (Shape* shape : shapes) { std::cout << "Area: " << shape->area() << std::endl; std::cout << "Perimeter: " << shape->perimeter() << std::endl; } delete[] shapes; return 0; }In this example, the
Shape class declares two pure virtual functions
area() and
perimeter().
Circle and
Square derived classes override these functions, providing specific implementations for each shape.
main() The function uses dynamic binding to call different virtual functions, depending on the type of the current object. This allows us to use a unified interface to handle different shapes.
The above is the detailed content of The secret of C++ virtual functions revealed. For more information, please follow other related articles on the PHP Chinese website!