简介
- C++ 是一种高级语言,高级语言(High-level programming language)相对于机器语言。
- 它是由 Bjarne Stroustrup(C++之父) 于 1979 年在贝尔实验室开始设计开发的。
- C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言,任何合法的 C 程序都是合法的 C++ 程序。
- C++ 是一种大小写敏感、支持过程化编程、面向对象编程和泛型编程。
- C++ 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。
谁适合观看学习本视频课程?
- 本视频课程是专门为初学者打造的,帮助他们理解与 C++ 编程语言相关的基础概念。
- 在您开始练习本教程中所给出的各种实例之前,您需要对计算机程序和计算机程序设计语言有基本的了解。
- 如果有 C 语言基础可以更好的学习此课程,没有也没有关系,都是从基础开始讲解。
历史
- 1979年,Bjarne Stroustrup 开始着手“C with Classes”的研发工作。
- 1983年,“C with Classes”语言更名为C++。
- 1985年,Bjarne Stroustrup的 C++ 参考手册《C++ Programming Language》出版,同年,C++ 的商业版本问世。
- 1990年,《Annotated C++ Reference Manual》发布,同年,Borland公司的商业版Turbo C++编译器问世。
- 1998年,C++ 标准委员会发布了 C++ 语言的第一个国际标准—ISO/IEC 14882:1998,该标准即为大名鼎鼎的C++98。
- 2003年,标准委员会针对98版本中存在的诸多问题进行了修订,修订后发布了C++03。
- 2005年,C++ 标准委员会发布了一份技术报告(Technical Report,TR1)详细说明了计划引入C++的新特性。
这个新标准被非正式地命名为C++0x,因为其预计会在本世纪第一个十年的某个时间发布。讽刺的是,直到2011年年中该标准才面世,相应的技术文档也随之出炉,一些编译器厂商也开始试验性地支持这些新特性。
- 2011年中,新的 C++ 标准(C++11)面世。
Boost库对该版本影响很大,一些新的模块甚至直接衍生于Boost中相应的模块。一些新的语言特性,包括正则表达式、完备的随机数生成函数库、新的时间相关函数、原子操作支持、标准线程库(2011之前,C和C++语言均缺少对线程的支持)、一种能够和某些语言中foreach语句达到相同效果的新的for语法、auto关键字、新的容器类、更好的union支持、数组初始化列表的支持以及变参模板的支持等等。
- 2014年,C++ 14这一继C++ 11之后的新的C++标准发布。
C++ 之父Bjarne Stroustrup说道,尽管与C++ 11相比,C++ 14的改进“有意做的比较小”,但是仍然为用户“带来了极大的方便”,是实现使C++“对新手更为友好”这一目标的步骤之一。在C++ 的时间表中,C++ 14按计划是一个小版本,完成制定C++ 11标准的剩余工作,目的是使C++ 成为一门更清晰、更简单和更快速的语言。新的语言特性留到了未来的C++ 17标准中。
C++14的主要特性可以分为三个领域:Lambda函数、constexpr和类型推导。
- 2017年,C++ 17 这一继C++ 14之后的新的C++标准发布。
C++ 17 是继 C++ 14 之后,C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称。ISO C++ 委员会正式发布了 C++ 17 标准,官方名称为 ISO/IEC 14882:2017。
基于 C++ 11,C++ 17 旨在使 C++ 成为一个不那么臃肿复杂的编程语言,以简化该语言的日常使用,使开发者可以更简单地编写和维护代码。
C++ 17 是对 C++ 语言的重大更新,引入了许多新的语言特性:
- UTF-8 字符文字;
- 折叠表达式 (fold expressions):用于可变的模板;
- 内联变量 (inline variables):允许在头文件中定义变量;
- 在 if 和 switch 语句内可以初始化变量;
- 结构化绑定 (Structured Binding):for (auto [key,value] : my_map) {…};
- 类模板参数规约 (Class Template Argument Deduction):用 pair p{1, 2.0}; 替代 pair<int, double>{1, 2.0};
- 此外,C++ 17 还带来了并行 STL,派生自 Boost 的文件系统库等其他特性;
- 更多特性参考:https://blog.csdn.net/csdnnews/article/details/78737012
- 2020年,正在进行中的 C++20。
[图片上传失败…(image-23fe22-1528270974447)]
欢迎进入C++的大门
#include <iostream>
using namespace std;
int main() {
cout << "Hello, world!" << endl;
return 0;
}
编译
$ g++ test.cpp
运行
[wangwei@localhost c_lan]$ ls
a.out test.cpp
[wangwei@localhost c_lan]$ ./a.out
Hello, world!
面向对象程序设计特性
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:
- 封装
- 抽象
- 继承
- 多态
标准库
标准的 C++ 由三个重要部分组成:
- 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
- C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
- 标准模板库(STL),提供了大量的方法,用于操作数据结构等。
C++ 的使用
- C++ 通常用于编写设备驱动程序和其他要求实时性的直接操作硬件的软件。
- C++ 广泛用于教学和研究。
- C++ 广泛用于高并发网络服务器开发。
C++ 开发环境配置
您需要确保电脑上有以下中软件,文本编辑器和 C++ 编译器。
- 文本编辑器
这将用于输入您的程序。文本编辑器包括Notepad、记事本、EMACS、vi/vim,还有其他的集成开发环境(IDE)。
文本编辑器的名称和版本在不同的操作系统上可能会有所不同。例如,Notepad 通常用于 Windows 操作系统上,vim/vi 可用于 Windows 和 Linux/UNIX 操作系统上。
通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。
在开始编程之前,请确保您有一个文本编辑器,然后把它保存在一个文件中,编译并执行它。
- C++ 编译器
写在源文件中的源代码是人类可读的源。它需要"编译",转为机器语言,这样 CPU 可以按给定指令执行程序。
C++ 编译器用于把源代码编译成最终的可执行程序。
大多数的 C++ 编译器并不在乎源文件的扩展名,但是如果您未指定扩展名,则默认使用 .cpp。
最常用的免费可用的编译器是 GNU 的 C/C++ 编译器,如果您使用的是 HP 或 Solaris,则可以使用各自操作系统上的编译器。
以下部分将指导您如何在不同的操作系统上安装 GNU 的 C/C++ 编译器。这里同时提到 C/C++,主要是因为 GNU 的 gcc 编译器适合于 C 和 C++ 编程语言。
UNIX/Linux 上的安装
如果您使用的是 Linux 或 UNIX,请在命令行使用下面的命令来检查您的系统上是否安装了 GCC:
$ g++ -v
如果您的计算机上已经安装了 GNU 编译器,则会显示如下消息:
使用内建 specs。
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, world!" << endl;
return 0;
}
最简单的编译方式:
g++ helloworld.cpp
由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:
$ ./a.out
Hello, world!
通常我们使用 -o 选项指定可执行程序的文件名,以下实例生成一个 helloworld 的可执行文件:
$ g++ helloworld.cpp -o helloworld
执行 helloworld:
$ ./helloworld
Hello, world!
如果是多个 C++ 代码文件,如 helloworld.cpp、test.cpp,编译命令如下:
$ g++ helloworld.cpp test.cpp -o helloworld
g++ 有些系统默认是使用 C++ 98,我们可以指定使用 C++ 11 来编译 helloworld.cpp 文件:
g++ -std=c++11 helloworld.cpp
g++ 常用命令选项
选项 | 解释 |
---|---|
-ansi | 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。 |
-c | 表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件。 |
-DMACRO | 以字符串"1"定义 MACRO 宏。 |
-DMACRO=DEFN | 以字符串"DEFN"定义 MACRO 宏。 |
-E | 只运行 C 预编译器。 |
-g | 生成调试信息。GNU 调试器可利用该信息。 |
-IDIRECTORY | 指定额外的头文件搜索路径DIRECTORY。 |
-LDIRECTORY | 指定额外的函数库搜索路径DIRECTORY。 |
-lLIBRARY | 连接时搜索指定的函数库LIBRARY。 |
-m486 | 针对 486 进行代码优化。 |
-o FILE | 生成指定的输出文件。用在生成可执行文件时。 |
-O0 | 不进行优化处理。 |
-O 或 -O1 | 优化生成代码。 |
-O2 | 进一步优化。 |
-O3 | 比 -O2 更进一步优化,包括 inline 函数。 |
-shared | 生成共享目标文件。通常用在建立共享库时。 |
-static | 禁止使用共享连接。 |
-UMACRO | 取消对 MACRO 宏的定义。 |
-w | 不生成任何警告信息。 |
-Wall | 生成所有警告信息。 |
g++ 应用说明
程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示:
gcc main.cpp -lstdc++ -o main
Windows 上的安装
建议直接安装Visual Studio,要支持最新的C++14特性,需要安装VS2015及以上版本。
下载及安装 Visual Studio Community 2015。
演示创建工程。
有兴趣的朋友,请关注微信公众号,有机会获取平台代币:
进入社区贡献者微信群,有机会获取平台代币: