我已经阅读过内联虚拟功能真的没有意义吗?.但我仍有一些疑虑,并没有找到答案.
他们说如果情况不明确,编译器应该内联虚函数.
然而:
只有当编译器具有实际对象而不是指针或对象的引用时,才会发生这种情况.
那么,如果我有一个B派生自一个类的类A(包含一个virtual void doSth()函数)并使用B*指针,而不是A*:
B* b = new B;
b->doSth();Run Code Online (Sandbox Code Playgroud)
B没有任何子类.在编译时应该调用什么函数是相当明显的.所以可以内联.实际上是吗?B有一些子类,但这些类没有自己的doSth()功能.所以编译器应该"知道"唯一要调用的函数B::doSth().我猜它虽然没有内联?问题如上; 例如,如果我有int* ptr = new int[10]一些数据操作ptr设置为,例如,第二,第五或最后一个元素,那么这个调用delete[] ptr是正确的吗?在手册中找不到它.
我的问题是关于编程技术,或者可能是设计模式.假设从base派生的几个类包含一个纯虚方法,它应该进行一些交互.
例如,Rectangle,Ellipse,Triangle和Line-都来自衍生Shape.而这个抽象类Shape包含virtual bool Intersects(Shape* another) = 0.
看来,我需要做六个实现,对(顺便说一句,在这个特定的例子中是更好的解决方案吗?).
我目前不知道其他任何例子.
也许我在谈论一个众所周知的事情,我几乎肯定有一些名字描述了这项技术.但是,我甚至不知道输入什么来在互联网上找到它.
那么,你能告诉我如何实现这样的事情(我仍然想知道是否需要任何辅助方法,或者,也许,RTII是dynamic_cast吗?)或者指出一些关于它的来源(艺术,教程或其他)?