1. C++ 起源
20世纪70年代,贝尔实验室 Thompson 和 Ritchie 在想玩游戏的过程中,开发了C语言用于重写unix系统。
20世纪80年代,贝尔实验室 Bjarne Stroustrup 在C语言的基础上开发了C++ ,主要为了解决软件设计危机。C++应用范围:Office工具,编译器,操作系统,大型游戏。
C++叫一开始带类的C,可想而知其和C语言的关系。C++衍生出了Java(语法比较简单),Java和C# 是兄弟。
2. 常用C++开发工具
- [记事本+命令行] 专业大牛身份标识别,上手慢
- [Visual c++] 经典开发工具,与流行的操作系统有冲突
- [VIsual Studio] 功能强大,体积同样强大;3-5G只支持微软版本的C,但是课程推荐标准C。
- [Code::blocks] 开源免费C++开发工具,专业开发人员推荐
- DEV C++、 Xcode、 Clion(收费)、C-free(国产)、 Xcode(苹果公司的开发工具mac)、C4droid(手机端运行)
- Eclipse c++ 开发
- 常用编译器
gnu-默认命令为g++ prog1.cc -o prog1
微软visual studio: cl -GX prog1.cpp
3. C++代码基本要素、hello word、两数相加
基本概念:
-
变量:定义一个变量,最好记得赋初值(变量的初始化)。
-
表达式:由一个/几个 操作数 + 操作符 组成,每个表达式都会产生一个结果,通常是将操作符作用到操作数所产生的值。
-
分号:c++中大多数语句以分号结尾(99%),
带分号:
->类定义: class clase_name {};
->函数原型 [没有大括号] 带分号,函数调用带分号
不带分号:
大括号后 大部分是块语句不用分号:if、for、while语句块、函数实现 -
函数:函数定义4要素:返回类型、函数名、圆括号(参数列表)、函数体{以花括号包围的语句块}
a. main() 返回类型必为int, 0表示程序运行成功,-1表示程序运行失败(其他非零返回值由操作系统定义特殊含义)
b. return语句返回值类型 和 函数返回类型 一致
c. 函数名要符合命名规范 -
每个C++程序都包含至少一个[函数],必须要有main函数。操作系统调用 main() 来执行程序(唯一被操作系统显示调用的函数)。
-
源文件: 保存[待编译程序]的文件,后缀名与具体编译器有关, 有.cpp .cp .c等等,(C++ primer .cc结尾)
-
编译预处理命令, 应该写在文件的最开始部分,尖括号 和 引号指明了不同的头文件搜索路径
- #include < > 引用的是编译器的类库路径里面的头文件;
- #include " " 引用的是用户程序目录的相对路径中的头文件,如果在程序目录没有找到引用的头文件则到编译器的类库路径的目录下找该头文件;
- C头文件以.h结尾,C++采用C前缀兼容C头文件(?),其底层实际还是导入了.h文件。也可以在C++中采用.h的头文件。
Demo1: hello world
9. Mac OS中使用VScode配置C++语言开发环境 一键运行,不用配置编译,运行,调试:
10. 在mac上使用vscode创建第一个C++项目(TODO)
#include <iostream>
int main()
{
std::cout<<"hello world 2" << std::endl;
return 0;
}
Demo2: 两个数相加
#include <iostream>
int main(){
std::cout<<"Enter two numbers:"<<std::endl;
int v1,v2;
std::cin>>v1>>v2;
std::cout<<"The sum of "<<v1<<" and "<< v2<< " is "<< v1+v2 << std::endl;
return 0;
}
4. 输入输出库iostream
iostream 格式化处理输入输出数据的标准库,iostream 的基础:istream,ostream。
秉持C++一切皆对象原则,iostream 库包含4个标准输入输出对象
iostream 库4个标准输入输出对象 | |
---|---|
cin | 标准输入 |
cout | 标准输出 |
err | 标准错误,用于输出警告和错误给程序使用者,try -expect? |
clog | 产生程序执行的一般信息?这些信息是什呢? |
<< | 输出操作符;两个操作数:左操作数–ostream对象,右操作数–输出内容;返回左操作数,所以可以连接输请求 |
>> | 输入操作符;两个操作数:左操作数–ostream对象,右操作数–变量;返回左操作数,所以可以连接输请求 |
endl | 操纵符;输出换行符并清空缓存区,通过刷新缓冲区,使得用户立即可以看到写入到流中的内容[\n+fflush(stdin)] |
std:: | 前缀 ,其表明 cout,cin 和 endl 是定义在命名空间 std 中的,可以避免与库中定义的名字相同而引起无意冲突 |
不用endl也是能看到,就是没有换行而已
忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,将会导致程序错误推断崩溃位置。
命名空间是C++的一大特性,用来在编写大型程序时组织源代码。
5. 注释 、编码规范
注释、规范
// 单行注释,临时注释,建议用单行注释符。
/**/ // 定界符号 多行注释
/*
* 定界符号,用于段落注释。
* 多行注释时,注释内容的每一行都用* 开始,表明这一行是注释块的一个 部分。
* 一般将注释块放在要解释的代码上方。
*/
-
作用:注释用于 概括算法 确认变量的用途 阐明难以理解的代码段。
-
注释并不会增加可执行程序的大小,编译器会忽略所有注释。
-
错误的注释比没有注释更可怕
编码、规范
- 每条语句占一行
- 函数体花括号独占一行
- 函数中的语句相对于花括号进行缩紧
- 函数名后紧跟小括号,没有空格
文件注释的模版
/****************************************
* 文件名:xxx
* 创建人:xxx
* 日 期:xxx
* 修改人:xxx
* 日 期:xxx
* 版 本:1.0.0
****************************************/
//****************************************
// Method:
// Fullname:
// Access: public
// Return: viod
// Parameter: int fontsize
//****************************************