虚函数和纯虚函数的区别

2022-11-12C/C++开发问题
2

本文介绍了虚函数和纯虚函数的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

纯虚函数和虚函数有什么区别?

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 为 deletedefault 关键字带来了新用法,它们看起来类似于纯虚函数的语法:

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;

参见这个问题和这个问题 有关此使用 deletedefault 的更多信息.

See this question and this one for more info on this use of delete and default.

这篇关于虚函数和纯虚函数的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

无法访问 C++ std::set 中对象的非常量成员函数
Unable to access non-const member functions of objects in C++ std::set(无法访问 C++ std::set 中对象的非常量成员函数)...
2024-08-14 C/C++开发问题
17

从 lambda 构造 std::function 参数
Constructing std::function argument from lambda(从 lambda 构造 std::function 参数)...
2024-08-14 C/C++开发问题
25

STL BigInt 类实现
STL BigInt class implementation(STL BigInt 类实现)...
2024-08-14 C/C++开发问题
3

使用 std::atomic 和 std::condition_variable 同步不可靠
Sync is unreliable using std::atomic and std::condition_variable(使用 std::atomic 和 std::condition_variable 同步不可靠)...
2024-08-14 C/C++开发问题
17

在 STL 中将列表元素移动到末尾
Move list element to the end in STL(在 STL 中将列表元素移动到末尾)...
2024-08-14 C/C++开发问题
9

为什么禁止对存储在 STL 容器中的类重载 operator&()?
Why is overloading operatoramp;() prohibited for classes stored in STL containers?(为什么禁止对存储在 STL 容器中的类重载 operatoramp;()?)...
2024-08-14 C/C++开发问题
6