1.第一个程序
include<iostream>
using namespace std;
int main()
{
//若无using namespace std,则以下输出应改为std :: cout <<”hello world” <<endl;
cout << “hello world” << endl;//endl也可采用c旧式风格\n
return 0;
}
iostream头文件:预处理操作,执行在编译源代码之前。相对于C,C++头文件省略了.h。
命名空间:using namespace std,此命名空间放在函数外与函数内作用域是不一样的。函数外作用域后面的函数均可使用,函数内作用域仅限于函数内。若无此命名空间,则调用iostream库中的对象应加上前缀std::。
类:是用户定义的一种数据类型,类之于对象就像类型之于变量。类描述了一种数据类型的全部属性,对象是根据这些描述而创建的实体。
2.数据类型和变量
2.1基本类型:整型和浮点型
整型从小到大依次是:
bool,char,signed char,unsigned char,short,unsigned short,int,unsigned int,long,unsigned long,long long,unsigned long long。
C++对以上整型有一个灵活的标准:
●
short至少16位
● int至少和short一样长
● long至少32位,且至少与int一样长
● long long至少64位,且至少与long一样长
std::cout << “sizeof = ” << sizeof(int) << endl;//C++可省略sizeof的括号。
以上具体占机器字节数多少,可用seizof(*)打印当前机器不同类型的字节数。
谈到sizeof,应及时想起与strlen的区别。
区别:
-
sizeof是运算符,可用类型及函数做参数。strlen是函数,只能以char *做参数。
-
sizeof与strlen虽然结果类型同为size_t,但sizeof计算的是分配空间的实际字节数,strlen计算的是空间中所占字符的个数,且不包含’\0’。
-
sizeof是在编译时将结果计算出来,strlen是在运行的时候计算结果。
char与wchar_t类型,char16_t和char32_t类型:涉及到字符集编码问题,后续讨论。
变量命名规则:
- 名称中只能有字母字符,下划线和数字
- 名称的第一个字符不能式数字
- 区分大小写字符
- 不能将关键字用于名称
- 以两个下划线或一个下划线和大写字母打头的名称被保留给实现使用
- C++对于名称的长度没有限制,但有些平台会有长度限制
常量:
#define和const区别
https://www.cnblogs.com/xumaomao/articles/11049541.html
浮点型:
float,double,long double表示浮点值的方法:一是小数点,二是E(e)指数法。如4.500 3.45E5
算术运算符%取余两个操作数都必须是整数。
不同类型的数值缩窄转换会存在潜在问题。如下:
转化 |
潜在问题 |
将较大的浮点型转换为较小的浮点型,如double转float |
精度降低,值可能超出目标类型的取值范围,结果将不确定。 |
将浮点型转换为整型 |
小数部分丢失,原来的值可能超出目标类型的取值范围,结果将不确定。 |
将较大的整型转换为较小的整型,如long转short |
原来的值可能超出目标类型的取值范围,通常只复制右边的字节。 |
尽量不要做高精度数据往低精度数据转换,且无符号位的数据计算级别高于有符号数。
C++中引入了4个强制类型转换运算符:static_cast<>,const_cast<>,dynamic_cast<>,reinterpret_cast<>.后续讨论。
2.2复合类型
数组:
一种存储多个同类型的数据格式,下标从0开始。C++中初始化数组时可省略 = 号。
注意:sizeof数组名计算的是整个数组的字节数,sizeof数组元素计算的是该元素所占的字节数。
String类简介:
C++标准扩展了库,因此string可以像数组一样用来保存字符串了。相对数组来说,简化了字符串合并操作,也可以将一个string赋给另一个string对象。而数组不能赋给另一个数组。后详细讨论。
C++增加了vector和array模板类来代替数组。
下面简单介绍下vector:
模板类vector类似于string类,也是一种动态数组。可以在运行阶段设置vector对象的长度,可在末尾附加新数据,也可在中间插入数据。
●要使用vector对象,vector头文件需包含。
●其次,vector也包含在std命名空间中,可使用using编译指令
●模板使用不同的语法来指出它存储的数据类型
●Vector类使用不同的语法来指定元素数
Vector<typename> vt (n)声明创建一个名为vt的一个vector对象,它可存储n个类型为typename的元素。其中参数n可为整型常量也可为整型变量。
模板类array与数组一样,长度固定,也使用栈,非自由存储区。
array<typename,n> arr声明创建一个名为arr的一个array对象,它可存储n个类型为typename的元素。其中参数n可为整型常量不可为整型变量。
比较数组,vector对象和array对象。
https://blog.csdn.net/qq_23286133/article/details/107072204
C++中getline()和get()方法的差异:两者接受的参数都相同,并且都是读取一行到行尾,但get()会保存换行符,getline()反而丢弃它。
结构体:一种可以存储多个不同数据类型的数据格式。
位字段:struct torgle_register{
Unsigned int SN : 4;
Bool goodin : 1;
};冒号后面的数字指定了该成员占用特定的位数。
共用体:一种能够存储不同的数据类型,但只能同时存储其中的一种类型数据格式。共用体所占字节大小为数据中最大成员的长度。
枚举:C++可利用枚举创建符号常量,且可在创建时初始化,若未初始化,后续的值总是相对上一个数据后加一。
指针:本身是一个变量,存储的是变量的地址。使用指针时尤其要防止野指针。指针和数组的差异后续讨论。
动态分配内存:C++新增了new运算符来分配内存,delete释放内存。与C的malloc/free差异后续讨论。
2.3循环和表达式
For(initialization;test-expression;update-expression)
以上三者皆可为空。Initialization循环只执行一次初始化;test-expression决定循环体是否被执行(此表达式若为1,则死循环);update-expression每轮循环结束时执行。
前缀表达式和后缀表达式。
X++;先参与运算后X自增。
++X;X先自增然后再参与计算。
参考博客: