刚学了c++,基本语法什么的算是知道了,但是想运用一下却发现不知道该如何下手。单片机c语言的烙印太深。。。。
最困扰我的问题目前是该把什么定为类?
例如stm32里把GPIO端口作为类,并继承rcc类,这样对吗?
再例如界面的一个例子,GUI上面的按键具有相似性(形状,按下的行为等)似乎应该作为一个类,但是每个按键作为对象要有不同功能这如何实现(同类里面成员函数都相同如何实现不同功能?)
请各位大侠分享一下在设计、梳理类时的一些经验
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
面向对象和C++没有什么关系...
面向对象是一种设计思想...区别于面向过程...最新的是面向切面吧...
好比打飞机的游戏...必然有飞机和子弹都在空间中飞行...
面向过程的设计思想典型的实现思路是构建一个二维数组表示空间int space[1024][1024]...
前8位代表类型.0是玩家飞机.1是敌人飞机.2是子弹.3是导弹.
后16位为X,Y方向加速度.最后8位放点别的.
每次Flip都遍历一次这个space...如果发现有冲突就能判断出事件...
面向对象的设计思想是把所有的东西定义为一个类Object...
这个类有x,y坐标属性.x.y加速属性.种类属性.还有一个是do行为...
之后通过继承出现了Player Enemy Bullet ...等等...
Player的do需要重写...因为是玩家控制...Enemy和do也要重写...因为不同的敌人行为不一样...
然后设定防空识别区(初步碰撞检测区)..
面向对象的方法用C一样能实现...大部分C++的方法用C都能实现...编译器级别的#define而已...
类一般的设计思想都是自顶向下设计...
比如定义一个类车 CVehicle.共有全局ID.X,Y,Z坐标.X,Y,Z加速度.Move行为.
继承产生CTank.CTruck.CTractor...
继承的时候添加行为(成员函数指针)或是属性(成员函数变量)
Move每个类都要重写.其中CTank还得加一个Fire().CTruck还有Load()和UnLoad()...
自下往上设计的也有.不过不是主流...
比如一个卡车拖车一个炮..CTruck.CGun..这样这两个类得合在一块聚合成一个类...
很多GUI本身就是面向对象的..包括Windows.ucGUI..虽然他们是用C编写的....
从窗口到按钮到ProgressBar到ListView等等都是继承自一个对象...
Windows这个对象叫Window...ucGUI叫Object...
因为一个Windows界面里是由无数个Windows组成的...
Window套Window..Window叠Window...所以叫Windows...
每个Windows的Paint()方法就是绘制自己.改变这个Paint就绘制出多彩的界面了..
每个按钮不同功能实现起来方法无数...
典型的有callback方法...让用户去实现...比如ucGUI...
还有复杂一点的用函数指针...术语叫"动态绑定"?..比如Qt的插座和插销...
GPIO以及RCC都是唯一的...没办法继承...充其量封装一下...
面向对象设计思想是很重要的...
但是面向对象的设计工具是以如何让外行最快速理解结构(不是最快让外行最快速设计)为出发点的...
所以通常学习C++等面向对象设计工具的时候看起来很简单...尤其是别人的程序和PPT...自己做起来完全无处下手...
C++等面向对象设计工具由于主要面向非专业人士的理解(一般是领导)...所以引入的概念非常"晦涩"...
完全理解并良好应用更是难上加难...
因为首先你得精通面向过程设计...然后才能秀一下面向对象的那些小伎俩....
首先研究面向过程设计吧...达到一定程度...自然就会面向对象了...
工具方面C就足够...C++华而不实...砍掉不常用的东西也就和C没区别了...
当然很多人就喜欢C++的什么泛型.继承.聚合.多态什么的语言特性...
先进肯定是先进...但不是易学易用...
有肉的菜就叫荤菜...面向对象也是一样...
合适的地方用一下面向对象就可以...没必要逼自己什么都用对象封起来...
2012年……
一周热门 更多>