107得票10回答
为什么C#默认情况下将方法实现为非虚拟的?

与Java不同的是,为什么C#默认将方法视为非虚函数?这更可能是性能问题而不是其他可能的结果吗? 我想起了Anders Hejlsberg的一段话,他提到现有架构带来的几个优点。但是,副作用怎么样呢?默认情况下使用非虚方法真的是一个好的权衡吗?

105得票10回答
安全地覆盖C++虚函数

我有一个带有虚函数的基类,我想在派生类中覆盖该函数。有没有一种方法可以让编译器检查我在派生类中声明的函数是否实际上覆盖了基类中的函数?我想添加一些宏或其他东西,以确保我没有意外地声明了一个新函数,而不是覆盖旧函数。 以以下示例为例:class parent { public: virtu...

92得票3回答
C++虚函数的返回类型

一个继承类能否使用不同的返回类型来实现虚函数(不使用模板作为返回值)?

78得票5回答
虚拟赋值运算符 C++

C++中的赋值操作符可以被定义为虚函数。为什么需要这样做?其他运算符能否也变成虚函数?

76得票8回答
我应该将所有方法标记为虚拟的吗?

在Java中,您可以将方法标记为final以使其无法被覆盖。 在C#中,您必须标记方法为virtual才能使其可以被覆盖。 这是否意味着在C#中应该将所有方法标记为virtual(除了不希望被覆盖的少数方法),因为很可能您不知道类会以何种方式被继承?

74得票5回答
"final"是否意味着覆盖重写?

我理解中,override 关键字表示一个给定的声明实现了一个基类 virtual 方法,并且如果没有找到匹配的基方法,则应该编译失败。 我对 final 关键字的理解是它告诉编译器不允许任何类覆盖此 virtual 函数。 那么,override final 是多余的吗? 似乎可以编译通...

74得票11回答
一个最终虚函数的意义是什么?

维基百科提供了以下关于C++11 final修饰符的示例:struct Base2 { virtual void f() final; }; struct Derived2 : Base2 { void f(); // ill-formed because the virtu...

73得票1回答
我应该默认虚析构函数吗?

我有一个抽象类,声明如下:class my_type { public: virtual ~my_type() = default; virtual void do_something() = 0; }; 使用 default 关键字来声明析构函数是否被认为是一种良好的实践?是...

69得票2回答
我们能否拥有静态虚函数?如果不能,那么为什么?

可能是重复问题: C++中的静态虚函数? 我们能否拥有静态虚函数?如果不能,那么为什么?class X { public: virtual static void fun(){} // Why we cant have static virtual functi...

67得票7回答
在C++中用私有函数覆盖公共虚函数

有没有任何理由使得重写的C++虚函数的权限与基类不同?这样做是否存在任何危险? 例如:class base { public: virtual int foo(double) = 0; } class child : public base { privat...