最近在用win32做一个画图软件,定义了一个类Shape,类中有一个虚函数Draw(),然后想定义具体的形状比如Line、Rect等来继承Draw(),使其在调用的时候运行子类自己的函数来画图。
之后定义了一个list g_listPicInfo来存储画下的图形,在遍历list来画出来,但是无法运行。大概代码如下,希望得到解答。
请问该如何解决呢?
begin和end后面缺少一对括号。
你的it->draw就是调用各个指针的函数。同时因为draw是虚函数。它会通过多态特性来实现调用真正子类指针的draw函数实现
it是指针没错的,但是it是父类类型的指针,其指向的对象是子类类型的,子类类型的对象是实现了画图函数的,就是Draw,当调用子类对象的函数时,也就是it->draw执行时,子类对象(每个有虚函数的类构造的对象的内部会有指向虚函数的指针,叫虚表指针)会依据其内部的虚表指针找到子类继承下来的虚函数来执行,在这里就是draw函数。这就叫多态性,概括的说,就是父类类型的指针指向了子类类型的对象。