C++面试题:虚函数与纯虚函数的区别

虚函数与纯虚函数的区别

虚函数(Virtual Function)

  1. 定义:虚函数是一个在基类中被声明为 virtual 的成员函数,可以在派生类中被重写(Override)。
  2. 目的:允许派生类提供特定的实现,同时保持接口的一致性。
  3. 调用:可以在派生类对象上调用,也可以在基类指针或引用上调用。实际执行的函数取决于指针或引用所指向的对象的实际类型。
  4. 实现:虚函数在基类中可以有实现,也可以没有。如果没有实现,派生类可以选择重写它,也可以不重写。
  5. 多态性:虚函数是实现运行时多态性的关键,允许通过基类接口调用派生类的方法。

纯虚函数(Pure Virtual Function)

  1. 定义:纯虚函数是一个在基类中声明为 virtual,并且没有实现的成员函数,其声明以 = 0 结束。
  2. 目的:用来声明接口,强制派生类提供具体的实现。它使得基类成为一个抽象类(Abstract Class),不能实例化。
  3. 调用:不能直接调用,因为它们没有实现。只有当派生类重写了纯虚函数后,才能通过派生类对象或基类指针调用。
  4. 实现:在基类中没有实现,必须在派生类中被重写。
  5. 抽象类:包含至少一个纯虚函数的类是抽象类,不能被直接实例化。

区别

  • 实现:虚函数可以在基类中有实现,而纯虚函数没有实现,必须在派生类中实现。
  • 抽象性:包含纯虚函数的类是抽象类,不能被实例化;而包含虚函数的类不一定是抽象类。
  • 强制实现:纯虚函数强制要求派生类提供实现,而虚函数不强制。
  • 接口定义:纯虚函数主要用于定义接口,而虚函数可以用于定义接口也可以用于提供默认实现。

示例

class Base {
public:
    virtual void show() { // 虚函数,可以有默认实现
        std::cout << "Base show" << std::endl;
    }
    virtual void display() = 0; // 纯虚函数,没有实现,强制派生类实现
};

class Derived : public Base {
public:
    void show() override { // 可以选择重写或不重写
        std::cout << "Derived show" << std::endl;
    }
    void display() override { // 必须重写
        std::cout << "Derived display" << std::endl;
    }
};
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值