何时使用派生类指针和基类指针
When to used derived class pointer and base class pointer
当我必须使用基类和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)。比方说,现在你正在经营一家动物园(只有猫和狗:),你需要保留一份动物清单。你可以创建两个单独的列表,一个用于猫,另一个用于狗。然而,如果你认为猫和狗只是动物,你可以创建一个带有动物指针的列表。
这样,通过从派生类类型中抽象自己,您可以通过具有指向基类的简单指针来处理不同的派生类。
派生类指针完全不同,因为它们只能"表示"派生类类型。
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如果基类包含双指针成员,则派生类的构造函数
- 使用基类指针调用基类的值构造函数的语法是什么?
- 如何在基类指针向量的元素上应用重载的多态函数
- 如何使用 std::make_shared 创建基类类型的智能指针?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 指向基类派生类的 std::unique_ptr 的指针
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- std::variant vs指向C++中异构容器基类的指针
- 模板化函数或具有指向基类的指针的函数
- 指向基类的唯一指针
- C++函数解析基类指针到派生类指针
- 指向基类的指针的 std::vector 的深层副本
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 无法从指针派生类转换为指针基类(多态性)
- 使用指针基类的=操作符的多态性