不能实例化抽象类的浅尝

今天写代码,想实现个功能,写成一个界面类,做成了CView的子类,编译无法通过,说是不能实例化抽象类,由于CView::OnDraw是抽象的。这个问题我是第一次遇到,于是网上搜了一下都不能得到满意的答案。找出C++方面的书认真分析了一下,又收获不少。

首先对于虚函数存在的意义有了新的认识。

如果没有虚函数,对于“基类的指针”指向“派生类的对象”,只能由该指针调用基类所定义的函数。例如:

class CA { void B(); } class Ca:public CA { void B(); } CA* pA; CA A1; Ca a1; pA = &a1; pA->B(); // 其实这句调用的是CA::B();

有了虚函数后,将上述两个B函数都声明成virtual函数,则有

pA = &a1; pA->B(); // 其实这句调用的是Ca::B(); pA = &A1; pA->B(); // 其实这句调用的是CA::B();

这就是我总结的虚函数的妙用,但应该理解还不是很深刻,欢迎高手拍砖。

回到我之前的问题,MFC中有两个十分重要的虚函数,document中的Sirialize函数和view中的OnDraw函数。而这两个函数又是纯虚函数,需要用户在自己的CMyDoc和CMyView中改写,而我的类继承了CView,却没有改写OnDraw函数,就变成了抽象类,不能对其实例,于是就有了报错“不能实例化抽象类”。bingo!

但是我还没太想好好的解决办法,如果把我做的类继承改为CWnd,我类里的部分函数就无法使用,如getDC()。本身又不想把OnDraw函数复写,所以还请高手给我一种大家通用的方法。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值