1. 为什么学习C++
(1)C++代表了当代软件开发的思想:面向对象开发,这是之前的课程没有涉及的,因此C++和Qt可以拓展新的编程思想。
(2)C++和Qt相对自成体系,是一个弯道超车的机会。
(3)C++和Qt是一个独立的就业方向。
(4)即使将来不从事C++或Qt方向,在工作中也一定会与类似此方向的同事共事。
2. C++的发展史
1983年,贝尔实验室(Bell Labs)的Bjarne Stroustrup发明了C++。 C++在C语言的基础上进行了扩充和完善,是一种面向对象程序设计(OOP)语言。
![](https://i-blog.csdnimg.cn/blog_migrate/947397b66875ad04c921e7cfc5c4b31f.png)
C++的源文件扩展名是cpp
![](https://i-blog.csdnimg.cn/blog_migrate/ee8cafc74c18db17e804ea4385fb69e7.png)
Stroustrup说:“这个名字象征着源自于C语言变化的自然演进”。还处于发展完善阶段时被称为“new C”,之后被称为“C with Class”。C++被视为C语言的上层结构,1983年Rick Mascitti建议使用C++这个名字,就是源于C语言中的“++”操作符(变量自增)。而且在共同的命名约定中,使用“+”以表示增强的程序。
常用于系统开发,引擎开发、嵌入式开发等应用领域, 至今仍然是最受广大程序员喜爱的编程语言之一。
C++在嵌入式中可以用于:
系统开发、算法开发、图形用户界面(GUI)开发。
3. C++特点
● 在支持C语言的基础上,全面支持面向对象开发。
● 编程领域广泛,功能强大(最难的编程语言之一)。
● 标准保持更新,本次课程以ISO C++98标准为主,以ISO C++11标准为辅。
● 为数不多的支持底层操作的面向对象语言。
● 在面向对象的编程语言中执行效率极高。
【C++新增特性】
C++基于C语言有如下方面的增强:
更为严格的类型检查
新增变量引用
支持面向对象
新增泛型编程
支持异常处理
支持函数及运算符重载
支持名字空间
面向对象编程OOP( Object Oriented Programming )
面向对象编程(OOP)
OOP是程序设计工程化的一种方法,软件架构的一种思想。
OOP基本原则是程序是由单个能够起到子程序作用的单元或对象组合而成,以达到软件工程的三个主要目标:重用性、灵活性和扩展性。
重用性:
代码被重复使用,以减少代码量,就是重用性的重要指标。
灵活性:
软件系统由很多可以复用的构件随意重构,以达到实现不同的功能,非常灵活。
扩展性:
软件系统可以容易地新增需求,基本构件也可以轻松的扩展功能。
![](https://i-blog.csdnimg.cn/blog_migrate/76e0ab19d31945bd8a7a20a10ae9e653.png)
4. 重要技术点
● 类 class
● 对象 object、instance......
● 面向对象的三大特性:封装 → 继承 → 多态
对象(Object)(instance)
可以对其做事情的一些东西。一个对象有状态、行为和标识三种属性。
类(class)
共享相同属性和方法的对象集合。描述了一类事物的抽象特点,类的函数和属性被称为“成员”。
封装(encapsulation)
将数据(数据)和方法(操作)捆绑在一起,创造出一个新的类型的过程。
将接口与实现分离的过程。
继承(inherit)
一个类共享了一个或多个其他类定义的属性和方法,在这种关系中子类可以对基类进行扩展、覆盖、重定义。
多态(polymorphism)
类型理论中的一个概念,一个名称可以表示很多不同类的对象,这些类和一个共同超类有关。因此,这个名称表示的任何对象可以以不同的方式响应一些共同的操作集合。
5. 面向过程和面向对象(掌握)
【思考】如果要把大象装进冰箱,应该怎么做?
面向过程的编程思想:
1. (我)打开冰箱门
2. (我)把大象装进冰箱
3. (我)关上冰箱门
面向过程的语言,关注的重点是“算法”,可以认为是一系列有序的步骤,只要按照这个步骤来做,就能得到预期的结果,这种思考方式更接近于计算机的思考方式。优点是可以把控到每个细节,因此程序的执行效率高;缺点是开发效率低。
为了提升软件项目的开发效率,发明了面向对象的编程思想。相比于面向过程,更注重上层对代码管理。
面向对象的编程思想:
1. (我)把大象和冰箱拟人化(实例化)
2. (我)给大象和冰箱下达任务
3. 大象和冰箱自己完成任务
面向对象的编程语言,关注重点是“对象”,可以认为“对象”的本质是一系列由于某种联系聚焦在一起数据单元体。不同单元体之间进行数据交互,从而实现代码运行的结果,程序员只需要站在更高层次去管理这些单元体,这种思考方式更接近人类的思考方式。优点是程序的开发效率高;缺点是执行效率低。
![](https://i-blog.csdnimg.cn/blog_migrate/2ce4c16c544633dbaccfdd7410f3902c.png)
6.C++编译
在Linux系统下使用g++
在Windows中以VS为主,QT、Eclipse等IDE使用MinGW
在QT安装的过程中已经安装了MinGW和QTCreator
7. 环境安装
C++的开发环境非常多,为了提高学习效率,直接使用下一门课的集成开发环境IDE(Qt Creator)进行C++开发。如果使用别的C++开发环境也能学习C++课程,但是Qt课程必须使用Qt Creator,另外使用其它环境出现的问题自行解决。
应急情况下也可以使用在线C++开发环境:
https://c.runoob.com/compile/12/
Qt Creator的安装(5.2.1)非常简单,一直下一步即可,但是要注意此软件的任何路径都不得包含中文字符。
C++使用ASCII编码,不支持中文字符,但是可以通过下面的设置来支持中文输出的显示:
1. 在Qt Creator中依次点击 工具 --- 选项。
2. 在弹出的窗口中,进行如下操作:
![](https://i-blog.csdnimg.cn/blog_migrate/be4751d4a1ea400134810c305e94cac8.png)
3. 设定完成,重新启动Qt Creator,不要再进入上一步的界面验证了。
8. 第一个C++程序
步骤
1. 打开Qt Creator软件
2. 点击New Project按钮
3. 选择 -- 非Qt项目 -- 纯C++项目,点击选择按钮
4. 命名项目名称(非中文),选择路径(费中文),下一步
5. 直接点下一步
6. 项目管理页面直接点完成按钮
详细步骤
创建并运行一个C++程序的过程如下:
1. 启动Qt Creator后,点击
![](https://i-blog.csdnimg.cn/blog_migrate/e7a22f033559512216cbe18e46b5cfc5.png)
2. 在弹出的窗口中,依次进行如下操作。
![](https://i-blog.csdnimg.cn/blog_migrate/9299b39ee099deff8a9d08e706dc8929.png)
3. 在弹出的窗口中,输入项目名称和项目工作目录的路径后(项目名称与路径都不要包含中文字符),点击“下一步”。
![](https://i-blog.csdnimg.cn/blog_migrate/01d54e3ef378b0e6b7f8731f24d8ee97.png)
4. 在弹出的窗口中,直接点击“下一步”。
![](https://i-blog.csdnimg.cn/blog_migrate/bf47fceada64a3d7148ed03897cf1f23.png)
5. 在弹出的项目管理窗口,直接点击“完成”。可以在左侧的边栏中看到新创建的项目。
![](https://i-blog.csdnimg.cn/blog_migrate/23149d0a6a40fc6de3b8a3cd913dece5.png)
项目中有两个文件:
● 项目配置文件 .pro
配置当前项目的参数,在C++课程中唯一功能是增加C++11的完全支持,需要添加下面的配置参数:
QMAKE_CXXFLAGS += -std=c++11
![](https://i-blog.csdnimg.cn/blog_migrate/bb36c03730d30f587530df37d0622e5c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6a6948bba631f233c28e05698ba37ac9.png)
● 源代码文件 main.cpp
在C++阶段,为了降低学习的难度,所有的代码都在这个文件中编写,并不涉及多文件编程,在Qt阶段再使用多文件编程。
当编辑完代码时,点击左下角的绿色三角就可以构建并运行当前项目。
![](https://i-blog.csdnimg.cn/blog_migrate/a69733d39d6a53a4d83674eecac8dcb4.png)
可以点击Ctrl + 鼠标滚轮,调节字体大小。
// 引入C++的标准IO头文件,C++标准头文件不写.h
// 如果要引入C头文件,需要编写.h
#include <iostream>
// 使用标准名字空间,后面讲,不要删
using namespace std;
/**
* @brief main 主函数程序的入口
* @return 随意
*/
int main()
{
// 输出一个字符串,endl是换行
cout << "Hello World!" << endl;
cout << "你好,世界!" << endl;
return 0;
}