c++虚方法:必须在父类中为父类和子类不共享的每个方法创建一个虚方法吗?
C++ Virtual Methods: Must I create a virtual method in the parent class for every method that the child and parent do not share?
我有几个多边形类型的对象,它们只是定义形状,我想将它们存储在一个包含多边形的向量中。Polygon有几个通用的方法,如getArea()等,但它是一个纯粹的抽象类。
如果我有一个名为Circle的Polygon的孩子,使用getRadius()方法,我是否需要在Polygon中创建一个虚拟方法来访问该方法,如果它存储在矢量中?
如果我扩展到越来越多的形状,在多边形声明中创建所有这些虚拟方法(在子声明中关联子方法)不是多余的和浪费空间吗?
是否有另一种方法来通知编译器,我在可用的子方法的多边形向量中创建的对象(子类型),而不使用虚拟方法?或者这就是虚拟方法的全部意义?
我理解如何使用子节点和父节点共享的虚拟方法,我只是在父节点没有我想从子节点访问的方法的情况下询问。
虚方法的意义在于允许由不同子方法以不同方式实现的方法在运行时以正确的实现被调用。
如果你有一个方法只特定于一个子类,那么父类不应该有它的虚方法。
如果你试图调用特定于Circle
的方法,那么你应该使用Circle*
而不是Polygon*
。
如果非共享方法对父类没有意义,那么您根本不希望将其放在父类中。事实上,在这种情况下,多态性并不适用,因为您不能让不同的运行时实例在该方法上表现不同:该方法对某些子类的实例没有意义,而对其他一些子类则有意义。因此,您可能想要创建一个新类,它(1)将成为前面提到的父类的子类,(2)将具有在其他类之间共享的虚拟方法,(3)将由这些类扩展。
一般来说,如果您想调用特定于特定类的方法,则需要将对象强制转换为该类或其声明该方法的祖先之一(无论是否为虚的)。
我假设你想让一个单独的getRadius调用向量,它将分别调用单独的多边形。那么基类显然是有意义的。
只需为所有子类实现单独的GetRadius方法,并具有一个默认的虚函数以确保一致性。
既然,你说,有多个形状,这意味着有多个类,也就是多个GetRadius实现。
虚函数将简化调用过程。
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 如何使父类不重复已经执行的祖父方法
- Arduino在子类中使用父类方法
- 在父类中为多个子类定义方法
- 父类使用来自子项的方法
- 不实现父类的虚拟方法有什么风险
- 将"this"从父类方法转换为子类方法是一种好的做法吗?
- 从C++中的父类实例访问子类方法
- 使用父类方法覆盖的多重继承
- 删除父类时,方法局部静态变量会发生什么情况
- 有没有更好的方法可以从子类访问父类的变量?
- 从 C++ 中的子类调用重载父类的方法
- 子类中的方法不会被父类中的虚函数调用
- 调用实际对象而不是父类的方法
- 为什么父类的父类方法在没有显式范围解析的情况下无法访问?
- C++父类,在2个不同的子类中实现了虚拟方法
- 将子类作为父类传递给方法
- 如何使父类的模板方法在子类中可见?