This question already has answers here:
Virtual/pure virtual explained
(12个答案)
去年关闭。
纯虚函数和虚函数之间有什么区别?
我知道“纯虚函数是没有主体的虚函数”,但这是什么意思,下面的代码行实际完成了什么:
纯虚函数是一个虚函数,其声明以
一个纯虚函数隐式地为抽象定义了它的类(与Java中不同,在Java中,有一个关键字可以显式声明该抽象类)。抽象类无法实例化。派生类需要重写/实现所有继承的纯虚函数。如果不这样做,它们也将变得抽象。
C++一个有趣的“功能”是,一个类可以定义一个具有实现的纯虚函数。
(What that's good for is debatable。)
请注意,C++ 11为
有关此
(12个答案)
去年关闭。
纯虚函数和虚函数之间有什么区别?
我知道“纯虚函数是没有主体的虚函数”,但这是什么意思,下面的代码行实际完成了什么:
virtual void virtualfunctioname() = 0
最佳答案
虚函数使其类成为多态基类。派生类可以覆盖虚函数。通过基类指针/引用调用的虚函数将在运行时解析。也就是说,使用对象的动态类型而不是其静态类型:
Derived d;
Base& rb = d;
// if Base::f() is virtual and Derived overrides it, Derived::f() will be called
rb.f();
纯虚函数是一个虚函数,其声明以
=0
结尾:class Base {
// ...
virtual void f() = 0;
// ...
一个纯虚函数隐式地为抽象定义了它的类(与Java中不同,在Java中,有一个关键字可以显式声明该抽象类)。抽象类无法实例化。派生类需要重写/实现所有继承的纯虚函数。如果不这样做,它们也将变得抽象。
C++一个有趣的“功能”是,一个类可以定义一个具有实现的纯虚函数。
(What that's good for is debatable。)
请注意,C++ 11为
delete
和default
关键字带来了新用法,其外观类似于纯虚函数的语法:my_class(my_class const &) = delete;
my_class& operator=(const my_class&) = default;
有关此
delete
和default
的用法的更多信息,请参见this question和this one。09-11 17:32