ListerCi
ListerCi
采纳率60%
2016-11-05 04:44 阅读 1.5k

C++使用父类定义一个list后,怎么才能让子类调用其继承的虚函数?

50

最近在用win32做一个画图软件,定义了一个类Shape,类中有一个虚函数Draw(),然后想定义具体的形状比如Line、Rect等来继承Draw(),使其在调用的时候运行子类自己的函数来画图。
之后定义了一个list g_listPicInfo来存储画下的图形,在遍历list来画出来,但是无法运行。大概代码如下,希望得到解答。

Shape类:所有具体图形类的父类。
图片说明

Line类:定义了画线的函数。
图片说明

之后在主体部分定义了一个list用于保存所有的图形:
图片说明

在鼠标点击屏幕时通过两个函数保存点的坐标:
图片说明

函数主体:在鼠标抬起时判断是什么图形然后将其放入list中
图片说明

绘图:遍历list,调用Draw()函数画出所有图形
图片说明

报错:
图片说明

请问该如何解决呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-11-05 16:24

    begin和end后面缺少一对括号。

    点赞 评论 复制链接分享
  • oyljerry oyljerry 2016-11-06 03:19

    你的it->draw就是调用各个指针的函数。同时因为draw是虚函数。它会通过多态特性来实现调用真正子类指针的draw函数实现

    点赞 评论 复制链接分享
  • sessos IT平头哥 2016-11-06 09:20

    图片说明
    改为

    it是指针没错的,但是it是父类类型的指针,其指向的对象是子类类型的,子类类型的对象是实现了画图函数的,就是Draw,当调用子类对象的函数时,也就是it->draw执行时,子类对象(每个有虚函数的类构造的对象的内部会有指向虚函数的指针,叫虚表指针)会依据其内部的虚表指针找到子类继承下来的虚函数来执行,在这里就是draw函数。这就叫多态性,概括的说,就是父类类型的指针指向了子类类型的对象。

    点赞 评论 复制链接分享