提示信息

什么是C++中的多态性,如何实现?

北健 已关注

C++中的多态性是指同一个接口或函数调用在不同的上下文中表现出不同的行为,是面向对象编程的一个基本特性。多态性主要分为两种类型:编译时多态性和运行时多态性。

1. 编译时多态性

编译时多态性(也称为静态多态性)在编译阶段就可以确定。主要通过函数重载和模板实现。

  • 函数重载:允许定义多个同名函数,只要它们的参数列表不同。例如:

    1. void print(int i) {
    2. std::cout << "整数: " << i << std::endl;
    3. }
    4. void print(double d) {
    5. std::cout << "浮点数: " << d << std::endl;
    6. }
    7. void print(std::string s) {
    8. std::cout << "字符串: " << s << std::endl;
    9. }
  • 模板:允许编写与类型无关的代码,从而在编译时实现多态性。例如:

    1. template <typename T>
    2. T add(T a, T b) {
    3. return a + b;
    4. }

2. 运行时多态性

运行时多态性(也称为动态多态性)是在程序运行时才确定。主要通过继承和虚函数实现。

  • 继承和虚函数:基类指针或引用指向派生类对象,并通过虚函数表(vtable)调用对象的函数。在基类中定义一个虚函数,并在派生类中覆盖它。例如:

    1. class Shape {
    2. public:
    3. virtual void draw() const {
    4. std::cout << "Drawing Shape" << std::endl;
    5. }
    6. };
    7. class Circle : public Shape {
    8. public:
    9. void draw() const override {
    10. std::cout << "Drawing Circle" << std::endl;
    11. }
    12. };
    13. class Square : public Shape {
    14. public:
    15. void draw() const override {
    16. std::cout << "Drawing Square" << std::endl;
    17. }
    18. };
    19. void render(const Shape& shape) {
    20. shape.draw();
    21. }
    22. int main() {
    23. Circle circle;
    24. Square square;
    25. render(circle); // 输出: Drawing Circle
    26. render(square); // 输出: Drawing Square
    27. return 0;
    28. }

在这个示例中,render函数接受一个Shape引用,不过由于draw函数是虚函数,根据传入对象的具体类型,调用了CircleSquare类的draw方法。这种动态绑定确保了程序在运行时选择合适的函数实现。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
北健 关注 已关注

最近一次登录:2024-10-26 14:33:42   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图