C++高级面试题:什么是 C++ 中的多态指针(Polymorphic Pointers)?

什么是 C++ 中的多态指针(Polymorphic Pointers)?

在 C++ 中,多态指针(Polymorphic Pointers)通常指向基类(Base Class)的指针,但它可以指向派生类(Derived Class)的对象。多态指针允许在运行时根据对象的实际类型来调用相应的函数,从而实现多态性(Polymorphism)。

多态指针是通过将基类指针指向派生类对象来实现的。这样做的好处是,我们可以使用基类指针来访问派生类中重写的成员函数,而不需要知道对象的具体类型。这样就可以实现基于对象实际类型的动态绑定,即在运行时确定应该调用的函数版本。

以下是一个简单的示例,演示了多态指针的概念:

#include <iostream>

// 基类
class Shape {
public:
    virtual void draw() const {
        std::cout << "Drawing a Shape" << std::endl;
    }
};

// 派生类
class Circle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a Circle" << std::endl;
    }
};

// 派生类
class Rectangle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a Rectangle" << std::endl;
    }
};

int main() {
    Circle circle;
    Rectangle rectangle;

    Shape* ptr;

    ptr = &circle;
    ptr->draw(); // 调用派生类 Circle 的 draw() 函数

    ptr = &rectangle;
    ptr->draw(); // 调用派生类 Rectangle 的 draw() 函数

    return 0;
}

在这个示例中,我们定义了一个基类 Shape,以及两个派生类 Circle 和 Rectangle。基类中定义了一个虚函数 draw(),并在派生类中对其进行了重写。在 main() 函数中,我们创建了 Circle 和 Rectangle 对象,并将它们的地址赋给一个基类指针 ptr。然后,我们通过 ptr 指针调用 draw() 函数,根据指针所指对象的实际类型,动态地确定应该调用哪个版本的 draw() 函数。这就是多态指针的作用。
多态指针是指可以指向派生类对象的基类指针。在 C++ 中,通过将基类指针指向派生类对象,可以实现多态性,即在运行时根据对象的实际类型来调用相应的成员函数。

以下是另一个示例,演示了多态指针的使用:

#include <iostream>

// 基类 Animal
class Animal {
public:
    virtual void makeSound() const {
        std::cout << "Animal makes a sound" << std::endl;
    }
};

// 派生类 Dog
class Dog : public Animal {
public:
    void makeSound() const override {
        std::cout << "Dog barks" << std::endl;
    }
};

// 派生类 Cat
class Cat : public Animal {
public:
    void makeSound() const override {
        std::cout << "Cat meows" << std::endl;
    }
};

int main() {
    Dog dog;
    Cat cat;

    // 基类指针指向派生类对象
    Animal* ptr;

    // 指向 Dog 对象的指针
    ptr = &dog;
    ptr->makeSound(); // 调用的是 Dog 类的 makeSound 函数

    // 指向 Cat 对象的指针
    ptr = &cat;
    ptr->makeSound(); // 调用的是 Cat 类的 makeSound 函数

    return 0;
}

在这个示例中,我们定义了一个基类 Animal 和两个派生类 Dog 和 Cat,它们都实现了 makeSound 函数。然后,我们创建了一个基类指针 ptr,分别让它指向 Dog 对象和 Cat 对象。通过基类指针调用 makeSound 函数时,会根据对象的实际类型调用相应的函数。这种根据对象实际类型调用不同函数的行为就是多态性的体现。

相关推荐

  1. C++_(函数指针)

    2024-03-15 21:42:05       32 阅读
  2. C语言常见面试什么宏,宏作用什么

    2024-03-15 21:42:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 21:42:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 21:42:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 21:42:05       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 21:42:05       20 阅读

热门阅读

  1. springboot 查看和修改内置 tomcat 版本

    2024-03-15 21:42:05       20 阅读
  2. 熊全淹懂数论又懂代数

    2024-03-15 21:42:05       18 阅读
  3. 怎么处理粘包问题

    2024-03-15 21:42:05       18 阅读
  4. LLM(大语言模型)常用评测指标-困惑度(Perplexity)

    2024-03-15 21:42:05       15 阅读
  5. Ubuntu20系统安装完后没有WIFI

    2024-03-15 21:42:05       16 阅读
  6. ffmpeg视频处理常用命令

    2024-03-15 21:42:05       17 阅读
  7. 深入理解DHCP服务:网络地址的自动化分配

    2024-03-15 21:42:05       20 阅读
  8. Python yield from

    2024-03-15 21:42:05       15 阅读
  9. Python中的pass语句详解

    2024-03-15 21:42:05       21 阅读
  10. 使用Python进行图片格式转化/分辨率转化

    2024-03-15 21:42:05       20 阅读
  11. Python注册用法

    2024-03-15 21:42:05       20 阅读
  12. 计算机网络基础

    2024-03-15 21:42:05       14 阅读