Difference between a virtual function and a pure virtual function(虚函数和纯虚函数的区别)
问题描述
纯虚函数和虚函数有什么区别?
What is the difference between a pure virtual function and a virtual function?
我知道纯虚函数是一个没有实体的虚函数",但这意味着什么以及下面这行实际做了什么:
I know "Pure Virtual Function is a Virtual function with no body", but what does this mean and what is actually done by the line below:
virtual void virtualfunctioname() = 0
推荐答案
虚函数使其类成为多态基类.派生类可以覆盖虚函数.通过基类指针/引用调用的虚拟函数将在运行时解析.也就是说,使用对象的动态类型而不是它的静态类型:
A virtual function makes its class a polymorphic base class. Derived classes can override virtual functions. Virtual functions called through base class pointers/references will be resolved at run-time. That is, the dynamic type of the object is used instead of its static type:
Derived d;
Base& rb = d;
// if Base::f() is virtual and Derived overrides it, Derived::f() will be called
rb.f();
纯虚函数是声明以=0
结尾的虚函数:
A pure virtual function is a virtual function whose declaration ends in =0
:
class Base {
// ...
virtual void f() = 0;
// ...
纯虚函数隐式地将它定义为抽象的类(与在Java中使用关键字显式声明抽象类不同).抽象类不能被实例化.派生类需要覆盖/实现所有继承的纯虚函数.如果不这样做,它们也会变得抽象.
A pure virtual function implicitly makes the class it is defined for abstract (unlike in Java where you have a keyword to explicitly declare the class abstract). Abstract classes cannot be instantiated. Derived classes need to override/implement all inherited pure virtual functions. If they do not, they too will become abstract.
C++ 的一个有趣的特性"是一个类可以定义一个具有实现的纯虚函数.(有什么好处值得商榷.)
An interesting 'feature' of C++ is that a class can define a pure virtual function that has an implementation. (What that's good for is debatable.)
请注意,C++11 为 delete
和 default
关键字带来了新用法,它们看起来类似于纯虚函数的语法:
Note that C++11 brought a new use for the delete
and default
keywords which looks similar to the syntax of pure virtual functions:
my_class(my_class const &) = delete;
my_class& operator=(const my_class&) = default;
参见这个问题和这个问题 有关此使用 delete
和 default
的更多信息.
See this question and this one for more info on this use of delete
and default
.
这篇关于虚函数和纯虚函数的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:虚函数和纯虚函数的区别
基础教程推荐
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++,'if' 表达式中的变量声明 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01