2011-06-16 167 views

回答

0

当您有多个派生类。而且在编译时你不知道哪个派生类将在运行时实例化。基类指针优于派生类指针。

0

当你想要使用派生类接口,或者当你想确保你正在处理这个特定的基类实现,或者当你想调用一个非虚函数时,使用派生类指针在派生类中定义。

在其他情况下,没关系。

1

这取决于你为什么得到。如果它是用于OO实现的,大多数情况下,您将使用指向基类的指针( 通常通过抽象);如果派生类定义扩展接口,则只会使用派生类 的指针。但C++中的继承是一种技术,并且它经常用于其他 的目的。 (想想一个迭代器类,它从 实例化std::iterator继承的,这是不OO派生和 you'ld从未使用指针的std::iterator的实例。)

我会经常使区分,使用OO概念的“推导”,对C++技术使用“继承”。但这绝不是标准,术语差别很大,所以你通常必须先找出作者正在谈论的内容:OO设计或C++ 实现。而且有时你会意识到自己并不知道他自己;他在自己的想法中混淆了两者。继承 是用于实现面向对象派生的C++语言结构,但是这种语言结构可以用于其他事情。

0

当您有多个派生类但您想从派生类类型中抽象出自己时,将使用基类指针。这可以在这样的情况下是例如非常有用:

class Animal { 
     Animal(); 
} 

class Dog : public Animal { 
     Dog(); 
} 

class Cat : public Animal { 
     Cat(); 
} 

正如你看到的,在这个例子中,你有一个基类(动物)和两个派生类(猫和犬)。现在让我们说你正在运行一个动物园(只有猫和狗:)),并且你需要保留一个动物列表。你可以创建两个单独的列表,一个用于猫,另一个用于狗。然而,如果你认为猫和狗只是动物,你可以创建一个指向动物的列表。

这样,通过从派生类类型中抽象出自己,可以通过指向基类的简单指针来处理不同的派生类。

派生类指针是完全不同的,因为它们只能“表示”派生类的类型。

相关问题