任何人都可以帮助我,当我必须使用基类和派生类指针时。
答案 0 :(得分:1)
这取决于你为什么要派生。如果是OO实现,
大多数情况下,你将使用指向基类的指针(将会
通常是抽象的;你只会使用指向派生的指针
class,如果派生类定义了扩展接口。但
C ++中的继承是一种技术,它经常用于其他技术
目的。 (想想迭代器类,它继承自
实例化std::iterator
。这是 not OO派生,并且
你永远不会使用指针作为std::iterator
的实例。)
我经常会对OO概念使用“派生”进行区分, 和C ++技术的“继承”。但这绝不是 标准,术语变化很大,所以你通常必须这样做 首先弄清楚作者在谈论什么:OO设计或C ++ 实现。而你有时会意识到他没有 了解自己;他在自己的脑海中混淆了这两个人。遗产 是用于实现OO派生的C ++语言构造,但这是 语言构造可以用于其他事情。
答案 1 :(得分:0)
当您有多个派生类时。并且您在编译时不知道哪个派生类将在运行时实例化。基类指针优先于派生类指针。
答案 2 :(得分:0)
当您想要使用派生类接口时,或者当您想要确保处理基类的这个特定实现时,或者想要调用非虚函数时,请使用派生类指针在派生类中。
在其他情况下,没关系。
答案 3 :(得分:0)
当您有多个派生类但希望从派生类类型中抽象自己时,将使用基类指针。这可能非常有用,例如在以下情况中:
class Animal {
Animal();
}
class Dog : public Animal {
Dog();
}
class Cat : public Animal {
Cat();
}
如您所见,在此示例中,您有一个基类(Animal)和两个派生类(Cat和Dog)。让我们说现在你正在经营一个动物园(只有猫和狗:)),你需要保持你的动物名单。您可以创建两个单独的列表,一个用于Cats,另一个用于Dogs。但是,如果您认为Cats and Dogs只是动物,您可以创建一个包含动物指针的列表。
这样,通过从派生类类型中抽象自己,可以通过使用指向基类的简单指针来处理不同的派生类。
派生类指针完全不同,因为它们只能“表示”派生类类型。