1876得票20回答
何时使用虚析构函数?

我对大部分的对象导向编程(OOP)理论有扎实的了解,但有一件事情经常让我困惑,那就是虚析构函数。 我曾以为无论如何,析构函数都会被调用,并且每个对象都要调用一次。 什么时候需要将析构函数声明为虚函数?为什么需要这样做呢?

1637得票28回答
为什么在C++中我们需要虚函数?

从我所了解的来看,虚函数是基类中的函数,你可以在其派生类中进行重写。 但是早些时候,在学习基本继承时,我能够在派生类中重写基类函数而不使用virtual。 我在这里漏掉了什么?我知道虚函数还有更多内容,而且似乎很重要,所以我想明确一下它到底是什么。

900得票19回答
List<Dog>是List<Animal>的子类吗?为什么Java泛型不是隐式多态的?

我对Java泛型如何处理继承/多态有些困惑。 假设有以下层次结构 - 动物(父类) 狗 - 猫(子类) 那么假设我有一个方法doSomething(List&lt;Animal&gt; animals)。根据继承和多态的所有规则,我会认为List&lt;Dog&gt;是List&lt;...

637得票29回答
什么是多态?它的作用是什么?它如何被使用?

什么是多态性,它有什么作用,以及它如何被使用?

377得票21回答
多态 vs 重写 vs 重载

在Java方面,当有人问: 什么是多态性? 回答重载或覆盖是否可接受呢? 我认为这不止于此。 如果您有一个定义了没有实现方法的抽象基类,并且您在子类中定义了该方法,那么这仍然是覆盖吗? 我认为重载肯定不是正确答案。

255得票4回答
为什么派生类中的重写函数会隐藏基类的其他重载函数?

考虑以下代码:#include &lt;stdio.h&gt; class Base { public: virtual void gogo(int a){ printf(" Base :: gogo (int) \n"); }; virtual ...

201得票7回答
使用不同类型和消息重新引发异常,保留现有信息。

我正在编写一个模块,希望为它可能引发的异常(例如从FooError抽象类继承所有Foo模块的特定异常)建立统一异常层次结构。这使得模块的用户可以捕获这些特定的异常并进行不同的处理(如果需要)。但是,该模块引发的许多异常是由于其他异常引起的;例如,在文件上有OSError时,执行某些任务失败。 ...

200得票18回答
继承和多态的主要区别是什么?

今天在模块末尾的开卷考试中,我遇到了这个问题并感到很迷惑。我正在阅读《Head First Java》,两个定义似乎完全相同。我只是想知道它们之间的主要区别,以便自己更加明确。我知道有很多类似的问题,但没有一个能提供明确的答案。

173得票2回答
C++中的纯虚析构函数

写下这样的代码是有问题的吗:class A { public: virtual ~A() = 0; }; 对于一个抽象基类,这样至少可以在MSVC编译通过...但它会在运行时崩溃吗?

163得票8回答
多态性:为什么要使用“List list = new ArrayList”而不是“ArrayList list = new ArrayList”?

可能是重复问题: 为什么应该优先使用Java类的接口? 何时应该使用接口?List&lt;Object&gt; list = new ArrayList&lt;Object&gt;(); ArrayList 继承自 List,所以如果一些特性在 ArrayList 中而不在 ...