*GPS_QT代码分析,理解了面向对象编程

23 篇文章 0 订阅
12 篇文章 1 订阅

GPSWidget这个类继承自QWidget

https://gitee.com/maxibooksiyi/gps_qt/blob/master/gpswidget.h 

Qwidget是常用的窗口基类,现在也能明白为什么书上第一个介绍的是gpswidget.h gpswidget.cpp了,而不是其他文件

拍自《QT5.9 C++开发指南》 P162

https://gitee.com/maxibooksiyi/gps_qt/blob/master/main.cpp

 这个main函数的写法似乎是QT的main函数的通用写法

拍自《QT5.9 C++开发指南》 P19

 

这让我感受,面向对象编程,就是先把各种类创建好。

然后在main(也就是我们传统的面向过程)里面是创建这些类的实例化对象来使用,是不是普罗米修斯里面也是这么干的。这样是不是就好理解面向对象编程的一些基本框架?

之前不是不好里面面向对象那mian函数怎么写,肯定要有面向过程的成分吧?

相当于尽可能把面向过程的成分放到类的函数里面,最后在要用的时候创建类的实例化对象引用函数。

这里也证实了我对main的理解,面向对象里面也是有面向过程的,拍自《C++程序设计教程》 第3版 竞技版  P22

opencv似乎也是类库,用的时候就创建实例化对象。你去写main函数用,现在知道类库的真正用法了,就是创建实例化对象。所以面向对象编程写应用程序的写法就可以参考类库的写法和用法,写法就是先写出类库,用法就是在mian里面创建实例化对象,然后引用里面函数等等。而不是所有面向过程都堆在main里面。我们写串口功能包的时候,对于serial类,也是创建实例化对象再开始用的嘛对不对,其实不知不觉早就在面向对象编程了。

所以python面向对象编程也好理解了python本身就是一大堆的库。可以看作类库,然后创建对象用  tensorflow是不是也是一个库呢,对不对。
 

https://blog.csdn.net/sinat_16643223/article/details/115095453

 似乎创建实例化对象时调用构造函数实现的,那现在是不是明白构造函数的意义了

拍自《QT5.9 C++开发指南》P21

确实是的,没有构造函数,就不能创建对象

拍自《C++程序设计教程(第3版)通用版》P269

 现在再看别人C+++书上给的面向对象工程的例程,看他们的mian函数 ,就好理解了,也知道为什么要用面向对象,清楚了面向对象的用法之后,自然就理解为什么有构造函数,为什么有析构函数了,这些都不用死记了。叫你用面向对象的思想写一个工程也是很自然的事情了。

从面向对象的角度再去看ROS,再去看普罗米修斯我想也应该会好得多。

如果我当初四个串口驱动要用面向对象的思想来写,要用类来写,那确实就是要把类写在头文件里面,然后四个cpp包含进去,然后直接里面创建实例化对象就可以了,确实就是这样,现在也更能明白为什么类定义放在头文件里面!!!!而且下次你再写这方面的串口驱动时也没必要重写是不是。看看能不能直接改改帧头,改改长度什么的。

现在如果回看四年多前光庭实习写的网站,面对对象那些也好理解了对吧。当时还有点难以理解,面向对象,那不写面向过程了么?那时应该也觉得应该要有面向过程啊,不管怎么面向对象。反正当时应该没有完全理解的。

回看你当时的代码确实没有理解面向对象,一大堆逻辑写在main函数里面。面向对象的main函数一般是比较简洁的。当年的一些事情和东西,现在才明白,唉。

你之前不是不会用vector么,现在好理解了,vector就是一个类。用vector直接对象.函数就可以

函数就是对那些对象的操作。你是对vector插入数据,还是计算vector大小,直接调用对应函数就好了。具体函数不记得就去查表好了,对不对,是不是就简单多了,相比于你去操作数组,现在再复杂的操作也是调用一个函数OK了,不方便很多么,这样你再去写串口解析是不是也好很多?

https://blog.csdn.net/sinat_16643223/article/details/109400989

计算vector的长度只需要对象.size()就好了,多么快速方便!!!!!现在知道类的好处,知道面向对象的好处了吧!!!!所以好好用STL。

现在再来看这个gps_vio的代码就看得懂了,看的清晰了,作者是用面向对象的思想写的,所以main函数很简洁,这也是面向对象编程的一大特点,

https://gitee.com/maxibooksiyi/gps_vio/blob/master/src/GPSVIO_ros_node.cpp

这些图优化的cpp就是他写的一个类,这么再去看他的代码就很清晰了,也很自然觉得这么写。和以前看这个工程代码是两个层次了。现在觉得写出一段这样的代码是很自然的事情,而不会像以前一样觉得这个作者是不是什么高手,现在不会这么觉得了。

https://gitee.com/maxibooksiyi/gps_vio/blob/master/src/ISAM2Graph.cpp

更正一下,其实真正类的定义时放在头文件里面的,这也符合我们的规则

https://gitee.com/maxibooksiyi/gps_vio/tree/master/include/gps_vio

 https://gitee.com/maxibooksiyi/gps_vio/blob/master/include/gps_vio/ISAM2Graph.h

realsense的功能包其实也是用类来写的,我们如今从类的角度去看他们的代码是不是会好些,以后自己写一个功能代码时是不是首先先写类,是不是,应该形成这样的思想。

https://gitee.com/maxibooksiyi/realsense-ros/blob/development/realsense2_camera/include/t265_realsense_node.h

看librealsense也是的

https://gitee.com/T_Geek/librealsense/blob/master/include/librealsense2/hpp/rs_device.hpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值