请选择 进入手机版 | 继续访问电脑版
hot【项目分享】之智能交通灯

结合前几次GPIO的简单了解和学习,今天给大家分享一个GPIO的简单应用:智能交通灯 涉及硬件:开发套件 详细

开启左侧

C++编程提高

[复制链接]
小思 发表于 2017-7-6 18:36:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
申明:本系列不适合C++初学者
       C++是一个面向实用的语言,不会刻意去追求面向对象还是基于对象(实现方法和数据的捆绑),实用为王,什么能解决问题就用什么。
C++语言编写软件解决问题的主要方式是将问题解需要的对象抽象出相同的特征,这些特征包含属性值和行为方法,然后将这些特征封装为一个类。这样在解决问题的时候可以直接声明一个类的对象或者一系列类对象来协同解决问题。


面向对象的三个基本特征是:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!

申明:本系列不适合C++初学者
      
封装                                                                                                                                                           
什么是封装?
封装可以隐藏实现细节,使得代码模块化;封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。在面向对象编程上可理解为:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承                                                                                                                                                                     
什么是继承?
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。其继承的过程,就是从一般到特殊的过程。
通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承的实现方式?
继承概念的实现方式有三类:实现继承、接口继承和可视继承。
1. 实现继承是指使用基类的属性和方法而无需额外编码的能力;
2. 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
3. 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
多态                                                                                                                                             
什么是多态?
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
C++中的实时多态是通过虚函数实现的,虚函数有一个神奇的魔力即可以通过基类的指针调用子类的虚函数,不需要特别指明由何种对象来调用,而是由系统来选择调用父类还是子类的虚函数,实现晚捆绑。
C++模板是C++最强大的功能之一,C++泛型编程由此而来,模板是对函数重载的一种简单神奇的实现,免除了重写多个相似函数或者类的麻烦。模板函数和模板类只要在使用前传递给特定的数据类型,系统将自定替模板类或者模板函数中的自定义typename,这为类重用尤其是C++库的编写带来的巨大的便捷。STL就是C++模板和泛型编程的完美诠释。




PS:首先申明本帖子以及由内容延伸出来的帖子来自世界顶级C++大师Scott Meyers的成名之作《Effective C++》,书中的50条准则,每一条都扼要说明了一个可让你写出更好的C++ 程序代码的方法,并以特别设计过的例子详加讨论。在此第二版中,Meyers重新检验了每一准则,特别注意兼容于C++标准规格与现行编译器技术,并融入软件界对C++运用的最新观察结果。




C++编程提高一:从C转向C++
    条款1:尽量用const和inline而不用#define
    条款2:尽量用<iostream>而不用<stdio.h>
    条款3:尽量用new和delete而不用malloc和free  
    条款4:尽量使用c++风格的注释
C++编程提高二:内存管理
    条款5:对应的new和delete要采用相同的形式
    条款6:析构函数里对指针成员调用delete
    条款7:预先准备好内存不够的情况
    条款8: 写operator new和operator delete时要遵循常规
    条款9: 避免隐藏标准形式的new
    条款10: 如果写了operator new就要同时写operator delete
C++编程提高三:构造函数,析构函数和赋值操作符
    条款11:拷贝构造函数和赋值操作符
    条款12: 尽量使用初始化而不要在构造函数里赋值
    条款13: 初始化列表中成员列出的顺序和它们在类中声明的...
    条款14: 确定基类有虚析构函数
    条款15: 让operator=返回*this的引用
    条款16: 在operator=中对所有数据成员赋值
    条款17: 在operator=中检查给自己赋值的情况
C++编程提高四:类和函数 - 设计与声明
    条款18: 争取使类的接口完整并且最小
   条款19: 分清成员函数,非成员函数和友元函数
   条款20: 避免public接口出现数据成员
   条款21: 尽可能使用const
   条款22: 尽量用“传引用”而不用“传值”
   条款23: 必须返回一个对象时不要试图返回一个引用
   条款24: 在函数重载和设定参数缺省值间慎重选择
   条款25: 避免对指针和数字类型重载
   条款26: 当心潜在的二义性
   条款27: 如果不想使用隐式生成的函数就要显式地禁止它
   条款28: 划分全局名字空间
C++编程提高五:类和函数 - 实现
    条款29: 避免返回内部数据的句柄
    条款30: 避免这样的成员函数:其返回值是指向成员的非cons...
    条款31: 千万不要返回局部对象的引用,也不要返回函数内...
    条款32: 尽可能地推迟变量的定义
    条款33: 明智地使用内联
    条款34: 将文件间的编译依赖性降至最低
C++编程提高六:继承和面向对象设计
    条款35: 使公有继承体现 "是一个" 的含义
    条款36: 区分接口继承和实现继承
    条款37: 决不要重新定义继承而来的非虚函数
    条款38: 决不要重新定义继承而来的缺省参数值
    条款39: 避免 "向下转换" 继承层次
    条款40: 通过分层来体现 "有一个" 或 "用...来实现"
    条款41: 区分继承和模板
    条款42: 明智地使用私有继承
    条款43: 明智地使用多继承
    条款44: 说你想说的;理解你所说的
C++编程提高七:杂项
    条款45: 弄清C++在幕后为你所写、所调用的函数
    条款46: 宁可编译和链接时出错,也不要运行时出错
    条款47: 确保非局部静态对象在使用前被初始化
    条款48: 重视编译器警告
    条款49: 熟悉标准库
    条款50: 提高对C++的认识






PS:软件开发最重要的是思想而不是语言,所谓思想即拿到一个问题,分析问题给出问题的解。
看了很多关于C++编程过程的内容,深刻觉得软件过程化思想的重要性以及学习好的方法学带来的巨大收益。敏捷开发和极限编程是我最喜欢的方法,测试驱动和结对编程则是提高效率最简单实用的方法。

学习C++首先应该学习好C++基础语法,只有语法扎实了才能更集中于思想的建立。
愈发觉得软件开发抽象和建模是最重要的工作,而编程只是最低层次而已。不过还是要把最低层次搞好先。

越努力,越幸运。
所以,请努力成为更好的自己!

精彩评论4

田帅 发表于 2017-7-7 11:15:33 | 显示全部楼层

回帖奖励 +3 金钱

Hello world
 楼主| 小思 发表于 2017-7-7 15:32:53 来自手机 | 显示全部楼层
面向对象思维习惯的养成
张勇涛 发表于 2017-7-7 15:42:09 | 显示全部楼层

回帖奖励 +2 金钱

Very Good!
张溶元 发表于 2017-10-1 17:08:47 来自手机 | 显示全部楼层

回帖奖励 +2 金钱

提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行 更多
广告位
0351-8210788
周一至周日 9:00-18:00
意见反馈:mind@unigress.com
关注我们

扫一扫关注我们

Powered by Discuz! X3.4 Licensed  © 2001-2013 Comsenz Inc.( 晋ICP备12005011 )