Tag: 多态

Java中dynamic和静态多态性有什么区别?

任何人都可以提供一个简单的例子,解释在Java中的dynamic和静态多态性之间的区别?

如何调用base.base.method()?

// Cannot change source code class Base { public virtual void Say() { Console.WriteLine("Called from Base."); } } // Cannot change source code class Derived : Base { public override void Say() { Console.WriteLine("Called from Derived."); base.Say(); } } class SpecialDerived : Derived { public override void Say() { Console.WriteLine("Called from Special Derived."); base.Say(); } […]

c#从string实例化类

我有一个抽象类,我想把它扩展到一个扩展它的类。 我有孩子类名string。 除此之外… String childClassString; MyAbstractClass myObject; if (childClassString = "myExtenedObjectA") myObject = new ExtenedObjectA(); if (childClassString = "myExtenedObjectB") myObject = new ExtenedObjectB(); 我该怎么做? 基本上我怎么摆脱这里的if语句?

“纯虚函数调用”崩溃从何而来?

我有时会注意到程序在我的电脑上出现错误:“纯虚函数调用”。 当一个对象不能创build一个抽象类时,这些程序如何编译?

为什么多态不工作没有指针/引用?

我在SO上已经find了一些相似的题目,但是当我读到答案的时候,他们把注意力集中在了真正具体的问题的不同部分(如STL /容器)上。 有人能告诉我为什么你必须使用指针/引用来实现多态吗? 我可以理解的指针可能会有所帮助 – 但确实引用只区分传递值和传递引用? 当然,只要你在堆上分配内存 – 这样你就可以拥有dynamic绑定,那么这就足够了 – 显然不是。

将派生类对象存储在基类variables中

我想将几个类的实例存储在一个向量中。 由于所有的类都从同一个基类inheritance,所以这应该是可能的。 想象一下这个程序: #include <iostream> #include <vector> using namespace std; class Base { public: virtual void identify () { cout << "BASE" << endl; } }; class Derived: public Base { public: virtual void identify () { cout << "DERIVED" << endl; } }; int main () { Derived derived; vector<Base> vect; vect.push_back(derived); vect[0].identify(); return […]

C ++中的纯虚拟析构函数

写错了吗? class A { public: virtual ~A() = 0; }; 为抽象的基类? 至less在MSVC编译…会在运行时崩溃吗?

多态vs覆盖vs重载

在Java方面,当有人问: 什么是多态? 超载或重写是一个可接受的答案? 我觉得还有比这更多的一点。 如果你有一个抽象基类定义了一个没有实现的方法,并且你在子类中定义了这个方法,那么这个方法仍然是重写的吗? 我认为超载并不是正确的答案。

为什么派生类中的重载函数隐藏了基类的其他重载?

考虑下面的代码: #include <stdio.h> class Base { public: virtual void gogo(int a){ printf(" Base :: gogo (int) \n"); }; virtual void gogo(int* a){ printf(" Base :: gogo (int*) \n"); }; }; class Derived : public Base{ public: virtual void gogo(int* a){ printf(" Derived :: gogo (int*) \n"); }; }; int main(){ Derived obj; obj.gogo(7); } 得到这个错误: […]

何时使用虚拟析构函数?

我对大多数面向对象理论有一个很好的理解,但是让我困惑的是虚拟析构函数。 我认为无论对于链中的每个对象,析构函数总是被调用。 你什么时候想让他们变成虚拟的,为什么?