简述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;
}
区别
- 实现:虚函数在基类中有实现,而纯虚函数在基类中没有实现。
- 用途:虚函数主要用于实现多态性,而纯虚函数主要用于定义接口和实现抽象类。
- 实例化:包含虚函数的类可以实例化,而包含纯虚函数的类(抽象类)不能实例化。
- 派生类要求:派生类可以选择是否重写虚函数,但如果派生类想实例化,则必须提供纯虚函数的实现。
学习笔记
0 学习笔记