桌面端编程使用最多的编程语言之一就是C++,本部分将以C++作为代表来介绍桌面端编程。C++是常年稳居TIOBE编程语言排行榜前五的主流编程语言,在IT界被广泛使用,特别是在需要与底层硬件打交道的场合。在AI领域,C++语言是必会的编程语言之一,其重要性不言而喻。本文将重点介绍C++语言的知识架构。
首先回顾一下C++语言的发展历程[5]。
C++是C语言的继承,它既可以进行C语言面向过程的程序设计,又可以进行以抽象数据类型为特点的面向对象的程序设计。世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言,之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D. Ritchie和K. Thompson共同发明了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,它实际上是UNIX的“副产品”。它充分结合了汇编语言和高级语言的优点,高效而灵活,又容易移植。
20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,这是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C的工作。1983年该语言被正式命名为C++。
C++语言发展大概可以分为三个阶段,将三个阶段的起止时间、主要发展成果等内容可视化于图 4-9中,方便读者理解。
图 4-9 C++发展的三个阶段
图 4-10更为详细地呈现了C++主要发展年代列表。图中按照年份的先后顺序展现了C++发展历史上的重大事件,以便读者对C++的发展历史有更为详细的了解。
图 4-10 C++主要发展年代列表
C++编程一般使用Visual Studio软件。VS是Visual Studio的简称。Visual Studio是美国微软公司的开发工具包系列产品,是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如统一建模语言工具、代码管控工具、集成开发环境等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。Visual Studio是目前最流行的Windows平台应用程序的集成开发环境,使用Visual Studio可以非常方便地开发C++项目。Visual Studio软件的下载地址为:https://visualstudio.microsoft.com/。
在之前的文章《编程语言的通用架构》中已经呈现了编程语言的通用架构(见图 4-2),并指出学习其它编程语言,只需将该通用架构拓展到要学习的编程语言上即可。这就像我们拿了一个制造零件的模子,要做不同材质的零件,只要将这个模子作用到不同的材料中即可。请读者牢牢记住图 4-2中的编程语言的通用架构,后面论述不同编程语言的学习方法都是将该通用架构拓展到具体的编程语言来论述的。根据这一想法,将图 4-2中的编程语言的通用架构拓展到C++,得到了图 4-11中的C++语言的知识架构。下面将根据图 4-11来描述C++语言的知识架构。
图 4-11 C++语言的知识架构
C++语言的核心模块
(1) C++中的数据类型
要理解C++中变量的数据类型分为哪些种类,并熟练掌握每一种数据类型的变量的声明和赋值的方法。具体来说,必须理解整型、实型、字符型、逻辑型、枚举型、数组、结构体等变量的定义及其赋值方法。
(2) C++中的流程控制语句
熟练掌握C++中的流程控制语句的实现方法。具体来说,需要掌握分支语句、循环语句的实现方法。其中分支语句包括if语句、switch语句,循环语句包括for语句、while语句、do-while语句。
(3) C++中函数的定义与实现、函数重载及函数模板的使用方法
熟练掌握C++中函数的定义与实现,以及如何在主程序中调用自己编写的函数;掌握函数重载及函数模板的使用方法;明白使用函数的好处,会利用函数实现代码的封装。
(4) C++中的类的定义与实现、类的继承与派生方法
理解面向对象编程的核心思想,明白使用类的必要性和优势。熟练掌握C++中类的定义和实现方法。深刻理解类的派生和继承的主要思想,明白类的继承和派生的必要性和优势。熟练掌握类的继承和派生的方法。类是面向对象编程的核心,读者如果学习C++编程,务必在关于类的内容上面下大力气。
C++语言的扩展模块
C++语言的扩展模块主要包括:文件I/O、图像处理、网络通信、界面编程、数据库操作、并行计算、混合编程等。
(1) 文件I/O
在C++中,文件I/O主要是指流与文件的输入与输出方法。所谓输入流是指通过键盘等方式往内存里面输入数据,输出流则是数据从内存流向打印机等设备。文件的输入是指通过程序从硬盘上读入文件内容,文件的输出则相反。
(2) 图像处理
C++中的图像处理包含了图像、动画、视频等的展示、编辑、分析、保存等一系列的操作。它是C++实现人机交互及可视化功能的重要手段。熟练掌握C++的这个扩展模块,对于写出炫酷的软件来说至关重要。
(3) 网络通信
C++可以实现桌面端与桌面端之间、桌面端与服务器端等之间的通信。C++的网络通信模块是利用C++实现数据传输与存储的重要基础。
(4) 界面编程
为代码编写界面是实现代码与用户之间进行快捷、友好交互的基础。如果用户使用你编写的代码必须采用运行控制台程序的方式,这将是一件繁琐且困难的事情,尤其是对于没有编程基础的人员。通过为程序编写友好的界面,能够保证你的程序具有很强的易用性、友好性,提高用户的接受程度。
(5) 数据库操作
C++的数据库操作模块可以方便地实现对后端数据库的操作,包括与数据库建立链接,实现对数据的增加、删除、修改、查询等常见功能。这一核心功能建议读者认真学习,实现对数据库的操作是大多数软件必须具备的、非常常见的功能。
(6) 并行计算
并行计算就是同时使用多个计算资源来解决同一个计算问题。例如,采用多个线程或者多台计算机来处理求所有学生的平均成绩的问题。并行计算是实现大数据计算的重要手段。尤其在计算机视觉领域,利用C++的并行计算功能可以实现海量的图像或视频数据的处理。
(7) 混合编程
混合编程是指使用两种或两种以上的程序设计语言来开发应用程序的过程。例如,某个机器学习软件的主体架构采用C++编写,目的是加快程序的运行效率,但为了便捷的实现某种机器学习算法,则可以通过在主体框架的某个部分调用Python实现该算法的代码。这个机器学习软件就是通过C++与Python的混合编程方式来实现的。
如果想了解消除C++编程中的错误和问题的方法,敬请关注本公众号的下一篇文章《桌面端编程之消除C++编程中的错误和问题的方法》。
关于人工智能中编程能力和技能训练的更多介绍,可以购买《人工智能怎么学》进一步阅读。
图书购买方式
京东:https://item.jd.com/13395339.html
当当:http://product.dangdang.com/29469230.html
天猫:https://detail.tmall.com/item_o.htm?id=687374654836
为了让图书惠及更多的读者,为更多想学习人工智能的人提供帮助,经过向出版社申请,对图书《人工智能怎么学》的部分内容进行改编和连载。图书《人工智能怎么学》的全部内容包含了初级入门、中阶提高以及高级进阶三个级别的内容。连载的内容主要是初级入门级别,适合想对人工智能进行快速和高效入门的读者,对于已有一定的人工智能学习基础,希望进一步进阶或提高的读者,则需要购买图书《人工智能怎么学》,学习中阶提高以及高级进阶的内容。此外,对于学习人工智能感兴趣的读者,也可以加入知识星球《人工智能怎么学》,知识星球是一个构建学习社群的平台,通过加入《人工智能怎么学》的社群,你将获得更多的学习资料和课程信息。
与作者互动和了解更多信息
想跟作者一起学习人工智能和互动,你可以加入如下社群:
知识星球:https://t.zsxq.com/0aLkVg0os
QQ群:600587177
想了解更多关于人工智能学习及实践的内容,请关注如下媒体:
官方网站:https://bigdatamininglab.github.io
官方微信公众号:人工智能怎么学(可扫描下方二维码或者微信搜索“人工智能怎么学”添加关注)
CSDN:https://blog.csdn.net/audyxiao001
参考文献
Robert C. Martin. 代码整洁之道(第2版)[M]. 韩磊, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2020.
Herb Sutter, Andrei Alexandrescu. C++编程规范:101条规则、准则与最佳实践[M]. 刘基诚, 译. 北京: 人民邮电出版社, 2016.
杨冠宝. 阿里巴巴Java开发手册[M]. 北京: 电子工业出版社, 2020.
James Gosling et al. The Java Language Specification:Java SE 8 Edition[M]. Upper Saddle River: Addison-Wesley, 2014.
老九君. C++的发展简史[EB/OL]. https://www.cnblogs.com/ljxt/p/11636342.html, 2019-10-08.
翁惠玉. C++程序设计:思想与方法(第2版)[M]. 北京: 人民邮电出版社, 2012.
谭浩强. C++程序设计(第3版)[M]. 北京: 清华大学出版社, 2015.
Siddhartha Rao. Sams Teach Yourself C++ in One Hour a Day(Eighth Edition) [M]. Boston: Pearson, 2017.
Bjarne Stroustrup. Programming:Principles andPractice Using C++ (Second Edition) [M]. Crawfordsville: Pearson, 2014.
Bjarne Stroustrup. C++语言设计和演化[M]. 裘宗燕, 译. 北京: 人民邮电出版社, 2020.
Stephen Prata. C++ Primer Plus(中文第6版)[M]. 张海龙 等, 译. 北京: 人民邮电出版社, 2020.
Stanley B. Lippman, Josée Lajoie,Barbara E. Moo. C++ Primer(中文第5版)[M]. 王刚 等, 译. 北京: 电子工业出版社, 2013.
Stanley B. Lippman. Essential C++(中文版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2013.
侯捷. STL源码解析 [M]. 武汉: 华中科技大学出版社, 2015.
Ivor Horton. C++标准模板库编程实战 [M]. 郭小虎 等, 译. 北京: 清华大学出版社, 2017.
Brian W. Kernighan, Rob Pike. 程序设计实践 [M]. 裘宗燕, 译. 北京: 机械工业出版社, 2003.
Bruce Eckel. C++编程思想(两卷合订本)[M]. 刘宗田 等, 译. 北京: 机械工业出版社, 2011.
Scott Meyers. Effective C++:改善程序与设计的55个具体做法(第3版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2011.
Scott Meyers. More EffectiveC++:35个改善编程与设计的有效方法[M]. 侯捷, 译. 北京: 电子工业出版社, 2020.
Scott Meyers. Effective STL:50条有效使用STL的经验[M]. 潘爱民 等, 译. 北京: 电子工业出版社, 2013.
陆文周. Qt 5开发及实例(第4版)[M]. 北京: 电子工业出版社, 2019.
王维波. Qt 5.9 C++开发指南 [M]. 北京: 人民邮电出版社, 2018.
冯振, 郭延宁, 吕跃勇. OpenCV 4快速入门 [M]. 北京: 电子工业出版社, 2020.
ghscarecrow.Java的发展历程[EB/OL]. https://blog.csdn.net/ghscarecrow/article/details/82318636, 2018-09-02.
JMCui.Java的发展历程[EB/OL]. https://www.cnblogs.com/jmcui/p/11796303.html, 2019-11-07.
明日科技. Java从入门到精通(第5版)[M]. 北京: 清华大学出版社, 2019.
Kathy Sierra, Bert Bates. Head First Java (Second Edition) [M].Sebastopol: O’Reilly, 2005.
Bruce Eckel. Java编程思想(第4版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2007.
Cay S. Horstmann. Java核心技术 卷I:基础知识(第11版)[M]. 林琪 等, 译. 北京: 机械工业出版社, 2019.
Cay S. Horstmann. Java核心技术卷Ⅱ:高级特性(第11版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2020.
Joshua Bloch. Effective Java(中文第3版)[M]. 俞黎敏, 译. 北京: 机械工业出版社, 2019.
周志明. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)[M]. 北京: 机械工业出版社, 2019.
Brian Goetz. Java并发编程实战 [M]. 童云兰 译. 北京: 机械工业出版社, 2012.
Kamalmeet Singh. Java设计模式及实践 [M]. 张小坤 等, 译. 北京: 机械工业出版社, 2013.
明日科技. Java Web从入门到精通(第3版)[M]. 北京: 清华大学出版社, 2019.
未来科技.HTML5+CSS3+JavaScript从入门到精通[M]. 北京: 中国水利水电出版社, 2017.
Elisabeth Robson, Eric Freeman. Head First HTML与CSS(第2版)[M]. 徐阳 等, 译. 北京: 中国电力出版社, 2013.
Adam Freeman. HTML5权威指南 [M]. 谢廷晟 等, 译. 北京: 人民邮电出版社, 2014.
Eric A. Meyer, Estelle Weyl .CSS权威指南(第4版)[M]. 安道, 译. 北京: 中国电力出版社, 2019.
David Flanagan. JavaScript权威指南(第7版)[M]. 李松峰, 译. 北京: 机械工业出版社, 2021.
许令波. 深入分析Java Web技术内幕(修订版)[M]. 北京: 电子工业出版社, 2014.
Nicholas S. Williams. Java Web高级编程 [M]. 王肖峰, 译. 北京: 清华大学出版社, 2015.
孙卫琴. Tomcat与Java Web开发技术详解(第3版)[M]. 北京: 电子工业出版社, 2019.
郭霖. 第一行代码Android(第3版)[M]. 北京: 人民邮电出版社, 2020.
欧阳燊. Android Studio开发实战:从零基础到App上线(第2版)[M]. 北京: 清华大学出版社, 2018.
Dmitry Jemerov, Svetlana Isakova. Kotlin实战 [M]. 覃宇 等, 译. 北京: 电子工业出版社, 2017.
Kristin Marsicano, Brian Gardner, Bill Phillips, Chris Stewart. Android编程权威指南(第4版)[M]. 王明发, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2021.
刘望舒. Android进阶之光(第2版)[M]. 北京: 电子工业出版社, 2021.
邓凡平. 深入理解Android: Java虚拟机ART [M]. 北京: 机械工业出版社, 2019.
任玉刚. Android开发艺术探索[M]. 北京: 电子工业出版社, 2015.
林学森. 深入理解Android内核设计思想(上、下册)(第2版)[M]. 北京: 人民邮电出版社, 2017.
何红辉, 关爱民. Android 源码设计模式解析与实战(第2版)[M]. 北京: 人民邮电出版社, 2017.
Christian Keur, Aaron Hillegass. iOS编程(第6版)[M]. 王风全, 译. 武汉: 华中科技大学出版社, 2019.
张益珲. Swift 4从零到精通iOS开发[M]. 北京: 清华大学出版社, 2019.
Aaron Hillegass, Mikey Ward. Objective-C编程(第2版)[M]. 王蕾 等, 译. 武汉: 华中科技大学出版社, 2015.
Matthew Mathias, John Gallagher. Swift编程权威指南(第2版)[M]. 陈晓亮, 译. 北京: 人民邮电出版社, 2017.
Kazuki Sakamoto, Tomohiko Furumoto. Objective-C高级编程:iOS与OS X多线程和内存管理[M]. 黎华, 译. 北京: 人民邮电出版社, 2013.
Erica Sadun. iOS Auto Layout开发秘籍(第2版)[M]. 孟立标, 译. 北京: 清华大学出版社, 2015.
珲少. iOS性能优化实战[M]. 北京: 电子工业出版社, 2019.
罗巍. iOS应用逆向与安全之道[M]. 北京: 机械工业出版社, 2020.
Gaurav Vaish. 高性能iOS应用开发[M]. 梁士兴 等, 译. 北京: 人民邮电出版社, 2017.
刘浩. MATLAB R2020a完全自学一本通 [M]. 北京: 电子工业出版社, 2020.
天工在线. MATLAB 2020从入门到精通 [M]. 北京: 中国水利水电出版社, 2020.
苗志宏, 马金强. MATLAB面向对象程序设计[M]. 北京: 电子工业出版社, 2014.
徐潇, 李远 . MATLAB面向对象编程——从入门到设计模式(第2版)[M]. 北京: 北京航空航天大学出版社, 2017.
王文峰 等. MATLAB计算机视觉与机器认知[M]. 北京: 北京航空航天大学, 2017.
杨淑莹, 郑清春. 模式识别与智能计算——MATLAB技术实现(第4版)[M]. 北京: 电子工业版社, 2019.
Eric Matthes. Python编程:从入门到实践(第2版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2020.
Magnus Lie Hetland. Python基础教程(第3版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2018.
Luciano Ramalho. 流畅的Python [M]. 安道 等, 译. 北京: 人民邮电出版社, 2017.
Brett Slatkin. Effective Python:编写高质量Python代码的90个有效方法(第2版)[M]. 爱飞翔, 译. 北京: 机械工业出版社, 2021.
Jan Erik Solem. Python计算机视觉编程[M]. 朱文涛 等, 译. 北京: 人民邮电出版社, 2014.
Andreas C. Müller. Python机器学习基础教程[M]. 张亮, 译. 北京: 人民邮电出版社, 2018.
魏坤. Julia语言程序设计[M]. 北京: 机械工业出版社, 2018.
郝林. Julia编程基础(第2版)[M]. 北京: 人民邮电出版社, 2020.
Ben Lauwens, Allen B. Downey. Think Julia [M]. Sebastopol: O’Reilly,2019.
Jalem Raj Rohit. Julia Cookbook [M]. Birmingham: PacktPublishing, 2018.
Zacharias Voulgaris. Julia数据科学应用 [M]. 陈光欣, 译. 北京: 人民邮电出版社, 2018.
朱红庆. Julia机器学习核心编程:人人可用的高性能科学计算[M]. 北京: 电子工业出版社, 2019.
Norman Matloff. R语言编程艺术[M]. 陈堰平, 译. 北京: 机械工业出版社, 2013.
Andy Nicholls, Richard Pugh, Aimee Gott. R语言入门经典[M]. 姜佑 等, 译. 北京: 人民邮电出版社, 2018.
Robert I. Kabacoff. R语言实战(第2版)[M]. 王小宁 等, 译. 北京: 人民邮电出版社, 2016.
Hadley Wickham. 高级R语言编程指南[M]. 潘文捷 等, 译. 北京: 机械工业出版社, 2020.
Brett Lantz. 机器学习与R语言(第2版)[M]. 李洪成 等, 译. 北京: 机械工业出版社, 2017.
程乾, 刘永, 高博. R语言数据分析与可视化从入门到精通[M]. 北京: 北京大学出版社, 2020.
周伟明.程序员的十层楼(一、二、三)[J]. 程序员, 2009(6):134-136;2009(7):118-120; 2009(8):134-136.
注:本文版权归作者个人所有,如需转载请联系作者,未经授权不得转载。