c++概述
1. 概述
1.1 简介
“c++”
中的 ++
来自于 c 语言中的递增运算符++,该运算符将变量加 1。 c++起初也叫”c with class”。通过名称表明, c++是对 c 的扩展,因此 c++是 c 语言的超集,这意味着 任何有效的 c 程序都是有效的 c++程序。 c++程序可以使用已有的 c 程序库。
库
是 编程模块的集合
,可以在程序中调用它们。库对很多常见的编程问题提供了可靠的解决方法,因此可以节省程序员大量的时间和工作量
。
c++语言在 c 语言的基础上添加了 面向对象编程和 泛型编程的支持。 c++继承了 c语言高效,简洁,快速和可移植的传统。
所以c++融合了 3 种不同的编程方式:
- c 语言代表的
过程性语言
。 - c++在 c 语言基础上添加的类代表的
面向对象
语言. - c++模板支持的
泛型编程
。
c 语言和 c++语言的关系:
c++语言是在 c 语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“c/c++”。
c 语言和 c++并不是对立的竞争关系:
- c++是 c 语言的加强,是一种更好的 c 语言。
- c++是以 c 语言为基础的,并且完全兼容 c 语言的特性。
c 语言和 c++语言的学习是可以相互促进。学好 c 语言,可以为我们将来进一步地学习 c++语言打好基础,而 c++语言的学习,也会促进我们对于 c 语言的理解,从而更好地运用 c 语言。
1.2 起源
与 c 语言一样, c++也是在贝尔实验室诞生的, Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)在 20 世纪 80 年代在这里开发了这种语言。
Stroustrup 关心的是让 c++更有用,而不是实施特定的编程原理或风格。在确定语言特性方面,真正的编程比纯粹的原理更重要。 Stroustrup 之所以在 c 的基础上创建 c++,是因为 c 语言简洁、适合系统编程、使用广泛且与 UNIX 操作系统联系紧密。
用他自己的话来说, “c++主要是为了我的朋友和我不必再使用汇编语言、 c 语言或者其他现代高级语言来编程而设计的。它的主要功能是可以更方便得编写出好程序,让每个程序员更加快乐”。
假设为运行 windows 2000 的老式奔腾 pc 编写了一个很好用的 c++程序,而管理员决定使用不同操作系统(比如说 Mac OS 或 Linux)和处理器的计算机替换它。该程序是否可在新平台运行呢?当然,但是必须使用为新平台设计的 c++编译器重新编译。但是是否需要修改写好的代码?
如果不需要修改代码的情况下,重新编译程序后,程序依然运行良好,该程序是可移植的。
程序是否可移植性有两个问题需要解决。
- 第一是硬件,针对特定硬件编程的程序是不可移植的。
- 第二,语言的实现, windows xp c++ 和 Redhat Linux 或 Mac OS X 对c++的实现不一定相同。
虽然我们希望 c++版本与其他版本兼容,但是如果没有一 个公开的标准,很难做到。
因此,美国国家标准局(American National Standards Institute,ANSI)在 1990 年设立一个委员会专门负责制定 c++标准(ANSI 制定了 c 语
言的标准)。国际标准化组织(International Organization for Standardization, ISO)很快通过自己的委员会加入到这个行列,创建了联合组织 ANSI/ISO,制定 c++标准。
经过多年的努力,制定出了一个国际标准 ISO/IEc 14882:1998 ,并于 1998 年获得了 ISO、 IEc(International Electrotechnical committee,国际电工技术委员会)和ANSI 的批准。这个标准就是我们经常所说的 c++98。 它不仅描述了已有的 c++特性,还对语言进行了扩展,添加了异常、运行阶段类型识别(RTTI)、模板和标准模板库(STL)。
2003 年,发布了 c++标准第二版(IOS/IEc 14882:2003),这一版本对第一版修订了一些错误,但并没有改变语言特性,因此 c++98 表示 ++98/c++2003。
c++不断发展。 IOS 标准委员会于 2011 年 8 月批准了新标准 ISO/IEc 14882:2011,该标准被称为 c++11,与 c++98 一样 c++11 也新增了许多特性。
ISO c++标准还吸收了 ANSI c 语言标准, c++尽量做到是 c 的超集。意味着在理想情况下,任何有效的 c 程序都应该是有效的 c++程序。
ANSI 不仅定义了 c 语言,还 定义了一个 ANSI c 必须实现的标准 c 库。 c++也在使用这个库,另外 ANSI/ISO c++标准还提供了一个 c++标准类库。
2. 初始
2.1 安装QT
Qt [1] 是一个 1991 年由 Qt company 开发的跨平台 c++图形用户界面应用程序开发框架。
它既可以开发 GUI 程序,也可用于开发非 GUI 程序,比如控制台工具和服务器。
Qt 是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object compiler, moc))以及一些宏, Qt 很容易扩展,并且允许真正地组件编程。
2008 年, Qt company 科技被诺基亚公司收购, Qt 也因此成为诺基亚旗下的编程语言工具。
2012 年, Qt 被 Digia 收购。
2014 年 4 月,跨平台集成开发环境 Qt creator 3.1.0 正式发布,实现了对于 iOS 的完全支持,新增 WinRT、 Beautifier 等插件,废弃了无 Python 接口的 GDB 调试支持,集成了基于 clang 的 c/c++代码模块,并对 Android 支持做出了调整,至此实现了全面支持 iOS、 Android、 WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上, Qt 同 X Window 上的 Motif, Openwin, GTK 等图形界面库和 Windows 平台上的 MFc, OWL, VcL, ATL 是同类型的东西。
QT 界面:
2.2 c++的 Hello World
第一个 helloworld 程序:
#include <iostream>using namespace std;int main(int argc, char *argv[])
{cout << "Hello World!" << endl;return 0;
}
// Hello World!
分析:
- using namespace std; 表示 使用标准命名空间
- cout << “hello world”<< endl; 和 printf 功能一样,输出字符串”hello wrold”
扩展:
- 在 c 语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是 c++得用法改变了, c++头文件没有扩展名。但是有些 c 语言的头文件被转换为 c++的头文件,这些文件被重新命名,丢掉了扩展名.h(使之成为 c++风格头文件),并在文件名称前面加上前缀 c(表明来自 c 语言)。
namespace
是 指标识符的各种可见范围。命名空间用关键字 namespace 来定义。命名空间是 c++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。cout
是c++中的标准输出流
,endl
是输出换行并刷新缓冲区
。
3. 编程思想
3.1 面向过程
思考;将大象装进冰箱里
1,打开冰箱门
2,放入大象
3,关闭冰箱门
特点:只考虑事物的发展过程
面向过程编程思想的核心
:功能分解,自顶向下,逐层细化(程序=数据结构+算法)。
3.2 面向对象
1,事物中存在那些对象大象,冰箱2,建立对象与对象的关系1,打开冰箱门2,放入大象3,关闭冰箱门
特点:
- 先考虑事物中存在哪些对象,
- 再建立对象与对象的关系
面向对象编程(Object-Oriented Programming)简称 OOP
技术,是开发计算机应用程序的一种新方法、新思想。过去的面向过程编程常常会导致所有的代码都包含在几个模块中,使程序难以阅读和维护。在做一些修改时常常牵一动百,使以后的开发和维护难以为继。而使用 OOP 技术,常常要使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的,这样就增大了代码重用的几率,更加有利于软件的开发、维护和升级。
在面向对象中,算法与数据结构被看做是一个整体,称作对象,现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用下面的等式来定义对象和程序:
- 对象 = 算法 + 数据结构
- 程序 = 对象 + 对象 + ……
从上面的等式可以看出,程序就是许多对象在计算机中相继表现自己,而对象则是一个个程序实体。
面向对象编程思想的核心
:应对变化,提高复用。
3.3 面向对象的三大特性
封装
把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。
优点:
- 保护内部、降低耦合度(制造和使用的关联性)、提高复用性、美观(代码可读性)
继承
继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。
继承的作用:避免公用代码的重复开发,减少代码和数据冗余。
多态
多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
3.4 类与对象
对象
真是存在的事物
类
多个对象抽取其共同点形成的概念,称为类。
类与对象的关系
先有类,后有对象
一个类可以有多个对象,多个对象可以属于同一个类