何时使用派生类指针和基类指针

When to used derived class pointer and base class pointer

本文关键字:指针 基类 派生 何时使      更新时间:2023-10-16

当我必须使用基类和dervied类指针时,有人能帮我吗。

这取决于派生的原因。如果是OO实现,大多数时候,您将使用指向基类的指针(通常是抽象的);您将只使用指向派生的类,如果派生类定义了扩展接口。但是C++中的继承是一种技术,它经常用于其他目的。(想想迭代器类,它继承自CCD_ 1的实例化。这是而不是OO派生,并且你永远不会在std::iterator的实例中使用指针。)

我经常使用OO概念的"派生"来进行区分,以及C++技术的"继承"。但这绝不是标准,术语差异很大,所以您通常必须首先弄清楚作者在说什么:OO设计或C++实施有时你会意识到他没有了解自己;他在自己的脑海中混淆了两者。遗产是用于实现OO派生的C++语言构造,但是语言结构可以用于其他事情。

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

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

在其他情况下,这并不重要。

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

class Animal {
        Animal();
}
class Dog : public Animal {
        Dog();
}
class Cat : public Animal {
        Cat();
}

如您所见,在本例中,您有一个基类(Animal)和两个派生类(Cat和Dog)。比方说,现在你正在经营一家动物园(只有猫和狗:),你需要保留一份动物清单。你可以创建两个单独的列表,一个用于猫,另一个用于狗。然而,如果你认为猫和狗只是动物,你可以创建一个带有动物指针的列表。

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

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