【发布时间】:2016-09-08 12:18:56
【问题描述】:
我有一个关于 OOP 概念的愚蠢问题,我们选择多态的原因是什么??
C++ 中的简单代码:
class Shape{
public:
virtual void draw(){ cout<<"Shape"<<endl;};
};
class Traingle: public Shape
{
public: void draw(){cout<<"Triangle"<<endl;}
};
class Rectangle: public Shape
{
public: void draw (){cout<<"Rectangle"<<endl;}
};
int main(){
Shape *ptr= new Traingle();
ptr->draw();
delete ptr;
return 7;
}
这里的ptr->draw()函数会调用Triangle draw,如果指向Rectangle则调用Rectangle draw,即后期绑定。
创建基类指针并将其指向不同的类有什么必要性?我们可以在没有任何虚函数的情况下创建单独的类对象,并根据需要调用。 喜欢
int main(){
Traingle tObj;
tObj->draw();
Rectangle rObj;
rObj->draw();
}
基本上做同样的事情;
为什么基本上是多态?为什么是虚拟的?
它有什么需要或者使用这个属性有什么不同? 真实案例会有所帮助!
【问题讨论】:
-
在你的情况下不需要新的指针。但这与“需要什么(对于)多态性......”无关。
-
虚函数的意义在于我们可以在运行时定义行为并允许动态使用对象。多态是给它的名字。
-
例如,您可能想要创建形状集合。考虑
std::vector<Shape*>。它可能包含不同的形状,但你可以对它们做共同的事情。 -
或者创建一个single外部函数,
void drawMe(Shape& shape)。现在调用它两次,传递一个Triangle和Rectangle实例。好了。 -
Polymorphism in c++的可能重复
标签: c++ oop polymorphism virtual