打印

驱动框架以及面向对象的设计方法的示例

[复制链接]
楼主: IceAge
手机看帖
扫描二维码
随时随地手机跟帖
21
IceAge|  楼主 | 2008-1-11 00:23 | 只看该作者 回帖奖励 |倒序浏览

关于 virtual, 一个有趣的使用

void CContainer::Run() 
{
    m_bRunning = true;
    Event event;
    m_List.GetFirst();
    this->Draw();          // 注意:与直接调用 Draw() 的不同。 
    do {
        event.Type = Event::EventType::KEYBOARD;
        event.Message = getch();
        HandleEvent(event);
    } 
    while (m_bRunning);
}

使用特权

评论回复
22
OneMillion| | 2008-1-11 00:30 | 只看该作者

标记先,

  明天起来后再来研究。。

使用特权

评论回复
23
hotpower| | 2008-1-11 02:32 | 只看该作者

抽象,封装,继承,多态---能有C++编译器的俺绝不用C

听老师讲课就是舒服~~~只有在MCU里用惯了C++的人才能体会到C++带来的好处.

使用特权

评论回复
24
koon| | 2008-1-11 08:14 | 只看该作者

听君一席话,胜读十年书,请指导一下该看什么书.

使用特权

评论回复
25
农民讲习所| | 2008-1-11 09:54 | 只看该作者

C++一定要学

学得越精越好。
但是,MCU一定要用C,坚决抵触用C++,太缺乏移植性,而且C++在MCU上就是用C的语言在表达。

使用特权

评论回复
26
农民讲习所| | 2008-1-11 10:04 | 只看该作者

俺建议IceAge大侠把C++用C来解释解释

比如那个虚函数,用C的函数指针方式来表达出来,就非常不错。

使用特权

评论回复
27
齐鲁青未了| | 2008-1-11 17:24 | 只看该作者

俺的一个引路人&老师&领导给俺说

学会C++也学会了做人。

使用特权

评论回复
28
Swd21ic| | 2008-1-11 19:06 | 只看该作者

T_T

难道真的逼我学C++阿..这年头苦阿
55555

下到一本书 C++ Primer 嘿嘿看看

使用特权

评论回复
29
老狼| | 2008-1-11 20:12 | 只看该作者

人气不旺,是因为老师还没讲到精彩处!

老师您就讲吧!我是半路出家,学过C,没学过C++,直接就用VC,就是照猫画虎,会做一些东西,函数内部说实在的,就是用C写的,总觉得应该好好学学C++!

使用特权

评论回复
30
88088| | 2008-1-11 20:24 | 只看该作者

希望大家指导

使用特权

评论回复
31
蓝色日出| | 2008-1-11 21:06 | 只看该作者

支持

占个坑先

使用特权

评论回复
32
koon| | 2008-1-12 12:55 | 只看该作者

占上去,请老师继续讲课。

使用特权

评论回复
33
老狼| | 2008-1-12 13:15 | 只看该作者

呼唤老师!

使用特权

评论回复
34
HWM| | 2008-1-12 13:23 | 只看该作者

26楼的想法新鲜。但个人理解难,基本无法实现。

使用特权

评论回复
35
hpanfeng| | 2008-1-12 18:27 | 只看该作者

学习了

你们都是强人啊

使用特权

评论回复
36
icecut| | 2008-1-12 23:13 | 只看该作者

不错

c++有用的。
如果用简化版的用C编译还是不错的选择
楼主的程序和LINUX的QT编程有一拼了

使用特权

评论回复
37
jxfengzi| | 2008-1-17 18:44 | 只看该作者

hi

支持lz,
等LZ更新,

使用特权

评论回复
38
老狼| | 2008-1-17 23:42 | 只看该作者

老师咋也成了大忽悠?

呼唤老师出来讲课!

使用特权

评论回复
39
hotpower| | 2008-1-17 23:46 | 只看该作者

搬凳子~~~

使用特权

评论回复
40
IceAge|  楼主 | 2008-1-18 00:50 | 只看该作者

hotpower 大叔真是个勤奋的夜猫子啊。

现讲讲 this->Draw(). 

这个程序里的 this->Draw() 与 Draw() 功能上完全一样,但却体现了不同的思路。我们之所以需要一个框架,目的是为了让软件具有更好的灵活柔韧性,高度可扩展性。尤其是可扩展性,这也是 c/c++, java, .net 崛起,而basic 没落的重要原因。可以这么说,程序员水平高下的其中一个判据是,程序的可扩展性,这里体现出了对未来的预测。

这个演示程序使用了 link list 而不是 静态数组,目的是可以让 控件容器 可以任意添加或减少控件,这是一劳永逸的做法。 (这里归结为 动态数据 vs 静态数据)。

数据的扩展比较容易,但 行为 的扩展却步那么方便,尽管可以使用 virtual. 假设我们准备对 editBox 进行扩展,比如只允许数字输入,我们可以

class NumberEditBox : public EditBox

然后重载 EventHandler,过滤 按键 就可以完成。但是有时问题并不是那么容易就解决的。我们的演示程序很简单,完全的重载代码量不大,可是很多的时候是没有源代码,或是重写太费时,这是如何做?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则