不能实例化抽象类的浅尝
来源:互联网 发布:小红帽linux安装教程 编辑:程序博客网 时间:2024/05/02 02:26
今天写代码,想实现个功能,写成一个界面类,做成了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函数复写,所以还请高手给我一种大家通用的方法。
- 不能实例化抽象类的浅尝
- 抽象类不能实例化
- 关于“不能实例化抽象类“错误的解决办法
- 为什么抽象类不能实例化的解释
- 抽象类是不能被实例化的
- 抽象类真的不能实例化么?
- java抽象类不能实例化&实践是检验真理的唯一标准
- 抽象类不只是不能实例化
- 不能实例化抽象类 是什么原因?
- 为什么抽象类不能实例化?
- 抽象类不能被实例化
- C++ 不能实例化抽象类
- 网狐“CTableFrameSink”: 不能实例化抽象类
- 【Debug】不能实例化抽象类
- 抽象类不能进行实例化吗?
- 抽象类可以没有抽象方法,不能被实例化
- 没有躲过的坑--抽象类不能实例化对象(但是你明明定义的不是抽象类)
- 没有躲过的坑--抽象类不能实例化对象(但是你明明定义的不是抽象类)
- 每个开发人员现在应该下载的十种必备工具
- 序列化与反序列化
- IIS+TOMCAT,网页视频不能播放
- Javascript跨域详解(1)
- oracle_10g安装文档(图文)
- 不能实例化抽象类的浅尝
- js中getYear()在IE和FF中兼容问题(转)
- 导出Excel 把一个dataset的多个datatable导入到一个excel的多个sheet中
- java将date和String之间的互换
- VFP中如何判断某个用户是否连上SQL
- vim 使用方式
- 查看共享内存等信息并清除
- HDU 1010 Tempter of the Bone
- oracle min 字符赋值变量报错