34得票2回答
C++标准库中是否有纯虚函数?

在Nicola Gigante 2015年的讲座中,他提到(在开头)标准库中没有纯虚函数(或者他不知道有)。我相信Alex Stepanov反对这个语言特性,但自最初的STL设计以来,是否有任何纯虚函数进入了标准库? 顺便说一下(如果我错了,请纠正),unique指针中的删除器在大多数实现中...

33得票3回答
为什么虚函数不能使用返回类型推断?

n3797 文件的 § 7.1.6.4/14 节: 使用占位类型作为返回类型声明的函数不得是虚函数 (10.3)。 因此,以下程序是非法的:struct s { virtual auto foo() { } }; 关于这个原理,我所能找到的只有来自n3638...

33得票8回答
虚方法或函数指针

在C++中实现多态行为时,可以使用纯虚函数或函数指针(或functor)。例如,可以通过以下方式实现异步回调: 方法1 class Callback { public: Callback(); ~Callback(); void go(); protected: ...

30得票3回答
C++:指向虚成员函数单态版本的指针?

在C++中,可以获取一个类的(非静态)成员函数的指针,并在稍后对一个对象上调用它。如果该函数是虚函数,则根据对象动态类型的不同进行动态分配调用。还可以通过显式提供包含要使用的版本的范围,以单形式地调用对象的虚成员函数(而不使用成员指针)。以下代码演示了这一点:#include <iost...

30得票7回答
为什么在重写虚函数时需要重新声明[C++]

#include <iostream> using namespace std; class Duck { public: virtual void quack() = 0; }; class BigDuck : public Duck { public: ...

30得票2回答
如何检测一个方法是否是虚方法?

我尝试编写了一个特性来判断一个方法是否为virtual:(https://ideone.com/9pfaCZ) // Several structs which should fail depending if T::f is virtual or not. template <typ...

30得票5回答
覆盖具有不同返回类型的成员函数

考虑下面的示例:#include <iostream> using namespace std; class base { public: virtual int func() { cout << "vfunc in ...

29得票6回答
C++带有虚方法的对象大小

我对使用虚函数时对象大小有一些疑问。 1)虚函数class A { public: int a; virtual void v(); } 类 A 的大小为 8 字节,其中包含一个整数 (4 字节) 和一个虚拟指针 (4 字节)。class B: p...

28得票3回答
在没有基类(未派生)的类中,给虚函数添加final关键字是否有意义?

我正在阅读一个很棒的C++11教程,作者在解释final关键字时提供了这个示例:struct B { virtual void f() const final; // do not override virtual void g(); }; struct D : B { ...

27得票1回答
在C++中,当子类化时,为什么有时需要向重写的函数添加virtual关键字?

在C++的子类化/继承示例中,为什么有时基类具有虚关键字,有时重写函数也具有虚关键字?为什么有时需要在子类中添加虚关键字? 例如:class Base { Base(){}; virtual void f() ...... } }; class Sub : publi...