跳到主要内容

简述C++虚函数与纯虚函数的区别 ?

参考答案:

C++中的虚函数(virtual function)和纯虚函数(pure virtual function)是面向对象编程中多态性的重要组成部分。它们的主要区别在于实现和用途。

虚函数(Virtual Function)

虚函数是在基类中声明并在基类或派生类中实现的函数。当基类的指针或引用指向派生类对象并调用该函数时,将调用派生类中的实现,这就是动态绑定或运行时多态性。这允许程序在运行时确定应调用哪个实现。

例如:

class Base {
public:
    virtual void func() { cout << "Base function\n"; }
};

class Derived : public Base {
public:
    void func() override { cout << "Derived function\n"; }
};

int main() {
    Base* ptr = new Derived();
    ptr->func();  // 输出 "Derived function"
    delete ptr;
    return 0;
}

纯虚函数(Pure Virtual Function)

纯虚函数是在基类中声明但没有实现的虚函数。它们在基类中声明为 = 0。派生类必须提供纯虚函数的实现。包含纯虚函数的类是抽象类,不能实例化。纯虚函数主要用于定义接口和实现多态性。

例如:

class AbstractBase {
public:
    virtual void pureVirtualFunc() = 0;  // 纯虚函数
};

class Derived : public AbstractBase {
public:
    void pureVirtualFunc() override { cout << "Derived implementation\n"; }
};

int main() {
    // AbstractBase* ptr = new AbstractBase();  // 错误:不能实例化抽象类
    AbstractBase* ptr = new Derived();
    ptr->pureVirtualFunc();  // 输出 "Derived implementation"
    delete ptr;
    return 0;
}

区别

  1. 实现:虚函数在基类中有实现,而纯虚函数在基类中没有实现。
  2. 用途:虚函数主要用于实现多态性,而纯虚函数主要用于定义接口和实现抽象类。
  3. 实例化:包含虚函数的类可以实例化,而包含纯虚函数的类(抽象类)不能实例化。
  4. 派生类要求:派生类可以选择是否重写虚函数,但如果派生类想实例化,则必须提供纯虚函数的实现。
学习笔记
|||
说点什么吧
 
100:0
鲤跃网
http://www.sunycode.com
讲文明、要和谐
提交学习笔记
0 学习笔记
  • 还没有学习笔记,快来抢沙发吧!