文章目录
1 C++ 的诞生
C语言是美国贝尔实验室的D.M.Ritchie为计算机专业人员开发的,而不是为初学者开发的。
最开始大多数操作系统和软件都是C语言开发的,随着软件规模的不断扩大,C语言已经不能够满足需求,于是C++诞生了。
C++保留了C语言的语法和关键字,在C语言基础上增加了面向对象的思想,用C写的程序都可以用于C++。
OK ,先来一个Hello world。
C++ 和C语言一样,每个C++文件必须有一个main函数。
#include<iostream>
using namespace std; // 声明一个命名空间
/*
C++库的所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(iostream)中的函数、类、对象和类模板是在命名空间std中定义的。所以在C++程序的一开始,就用using namespace对std进行全局声明。
*/
int main(){
cout << "hello world!" << endl;
return 0;
}
对于命令空间请看下面的例子:
#include <iostream>
namespace ns1 { //新建一个命名空间名称为ns1;并在命名空间中创建一个整形变量并且赋初值为4
int a = 4;
}
using namespace std;
using namespace ns1; // 声明命名空间ns1,声明之后命名空间内的变量、函数等在整个文件的作用域内都有效
int main()
{
// int a = 6;
cout << "Hello world!" << endl;
cout << a << endl; // 如果int a =6 被注释 输出4.否则输出6,局部作用域更新全局作用域
return 0;
}
2 C++ 编码规范
2.1 C++项目的组成
- 一个C++项目可以由一个程序单元或者多个程序单元组成,每个程序单元是一个单独的文件,编译过程会对每个单元单独进行编译。
- 每个程序文件包括:预处理命令、全局声明、函数、预处理就是函数开头部分, #include 注意这行语句后面不加==;==,using namespace std; 选择命令空间,这个需要加分号。
- 一个函数由:函数首部、函数体组成,函数首部包括函数名、函数类型、函数属性、函数参数名、参数类型;函数体包括局部声明和执行部分。
- C++语句包括两大类:一类是声明语句,一类是执行语句。
- 和C语言一样C++程序也总是从main函数开始执行的,不论main函数在程序中的什么位置。
- C++不同与C语言的一个重要部分:类,有了类可以实现面向对象的几个特性,比如封装、继承、多态,在一个类中可以包括数据成员和成员函数。
2.2 C++编码规范
- 语句
以分号结尾的是一条语句 - 语句块
{ }大括号包起来的是一个语句块
分号的使用在C++中尤其重要,一般大括号后面不需要加分号,小括号、中括号或者一条语句后面必须以分号结尾 - 注释
C++的注释与C的注释是一样的,单行采用 // 单行注释 。 多行采用/* 多行注释 */
2.3 程序执行的流程
C++ 程序编写完成之后需要使用编译器编译成计算机能够识别的二进制文件,一般这个文件的后缀为.obj,C++程序文件是.cpp,C程序文件后缀是.C(使用.CPP也可以识别)。
一个实例输出两个数中比较大的数
#include <iostream>
using namespace std;
int max(int a, int b){
if (a>b){
return a;
}
else{
return b;
}
}
int main(){
int a, b;
cin >> a >> b; // 输入两个数字的时候,中间必须使用空格隔开
int maxnum;
maxnum = max(a,b);
cout << "较大的数是:" << maxnum << endl;
return 0;
}
/*
4 54
较大的数是:54
Process returned 0 (0x0) execution time : 4.164 s
Press any key to continue.
*/
3 C++ 数据类型
程序=数据结构+算法
数据类型在任何编程语言中都是重中之重,当然C PLUS 也不例外
3.1 常量
常量:从字面意思理解就是不能改变值的,常量包括数值型常量和字符型常量两大类。
整形常量
以“l”或者“L”结尾的是long int型常量
以0开头的是8进制常量
以0X开头的是16进制常量
浮点数常量
1.23 1.234e3
字符常量
单引号括起来的是字符常量 ‘a’ ‘X’
字符串常量
双引号括起来的是字符串常量 “Hello” “world”
符号常量
#define PI 3.14 PI就是一个符号常量
符号常量
#define PI 3.14 PI就是一个符号常量
3.2 变量
在程序运行期间可以改变的量称为变量,变量在内存中是会占据一定的存储单元,该变量的值就是放在存储单元中。
C++规定的标识符和C语言一样,只能由字母、数字、下划线组成,且第一个字符必须为字母或下划线。C++ 中严格区分大小写
变量的使用前必须进行定义,未定义的变量直接使用无法通过编译。
变量定义的格式:变量类型 变量名;
特殊的变量:const int a = 3 ; a在c++中被称为常变量,在整个作用域内只能调用不能改变
3.3 变量类型
类型 | 字节 | 范围 |
---|---|---|
char | 1 个字节 | -128 到127 或者0到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648到 2147483647 |
unsigned int | 4 个字节 | 0到4294967295 |
signed int | 4 个字节 | -2147483648到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0到65,535 |
signed short int | 2 个字节 | -32768到32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 精度型占4个字节(32位)内存空间 | +/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 双精度型占8 个字节(64位)内存空间, | +/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 长双精度型 16 个字节(128位)内存空间, | 可提供18-19位有效数字。 |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
4 C++ 运算符
4.1 算术运算符
+ // 加
- // 减
* // 乘
/ // 除
% // 取模
++ // 自增
-- // 自减
#include <iostream>
using namespace std;
int main(){
int a, b ;
cin >> a >> b;
cout << "a+b=" << a+b << endl;
cout << "a-b=" << a-b << endl;
cout << "a*b=" << a*b << endl;
cout << "a/b=" << a/b << endl;
cout << "a%b=" << a%b << endl; // 加减乘除取模运算都是常规的运算
cout << "a++=" << a++ << endl; // 自增运算符在变量后面,先输出a 再加1
cout << "++a=" << ++a << endl; // 自增运算符在变量前面, 先减1,再输出a ,这里输出a等于11,a++时候执行了一次加1,++a又执行了一次加1
cout << "a--=" << a-- << endl;
cout << "--a=" << --a << endl;
return 0;
}
/*
9 4
a+b=13
a-b=5
a*b=36
a/b=2
a%b=1
a++=9
++a=11
a--=11
--a=9
Process returned 0 (0x0) execution time : 5.184 s
Press any key to continue.
*/
4.2 关系运算符
> //大于
< //小于
== 等于
>= //大于等于
<= //小于等于
!= 不等于
4.3 逻辑运算符
&& //与
|| //或
! //非
4.4 位运算符
<< //按位左移
>> //按位右移
& //按位与
| //按位或
^ //按位异或
~ //按位取反
4.5 其他运算符
?: //三目运算符
= // 赋值运算符
, // 逗号运算符
/*
逗号运算符又称为顺序求值运算符,一般形式为
表达式1,表达式2
逗号表达式求解过程是:先求解表达式1的值,再求解表达式2的值,但是整个表达式的值是表达式2的值。
*/
* // 指针运算符
& // 引用运算符和取地址运算符
sizeof() // 求字节运算符
(类型) 变量名 // 强制类型转换运算符
// 类型名 (表达式),类型名不加括号,但是变量或者表达式用括号括起来
. // 成员运算符
-> // 指向成员运算符
[] // 下标运算符
+=
-=
*=
/= // 混合赋值表达式
4.6 优先级
4.7 自动类型转换方式
1、隐式转换
C在以下四种情况下会进行隐式转换:
1、算术运算式中,低类型能够转换为高类型。
2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。
2、算数运算的隐式转换
算数运算中,首先有如下类型转换规则:
1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。
2、short型转换为int型(同属于整型) 。
3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。
其次,有下面的规则。
当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示: