set ts=2;//设置tab键为2空格;
puts("");//换行
c++:
扩展名:.cpp,.C,.cc,.cxx
namespace 名字{
变量声明、变量定义、函数声明、函数定义。。。。
}
多个相同的命名空间会合并在一起。
命名空间可以嵌套命名空间。
使用:命名空间::内部的名字。
匿名名字空间(全局名字空间):可以直接使用。
输入输出:在写程序时不需要考虑类型。
c与c++:
结构、联合、枚举。
定义完毕之后得到的是自定义类型。
c++中:
定义结构什么的不用重复struct、union、enum。
结构定义时,成员不单是数据还可以是函数。
支持匿名联合。union{
int x;
char y[];
}
输出显示十六进制:cout<<hex<<x<<endl;
枚举类型不再等同于整数类型,如果需要转化可以强制类型转换。
c中void*类型与其他类型相通;
c++中void*不能赋值其他类型。
类型转换:c++不提倡强制类型转换,如果确实需要,c++提供另外4种:
static_case<类型>(数据)用于数值类型之间以及void*和别的*类型之间;
reinterpret_case<类型>(数据)用于数值类型与地址类型或地址与地址之间
const_cast<T*>(T常量的地址)去掉对地址所指向的目标的const限制。
dynamic_cast
函数:1.C语言中默认返回int类型,c++作废;
2.c中空参数说明参数个数随意,c++中表示无参,所依函数调用前必须声明或定义。
3.重载:C++允许多个函数同名,但要求形参参数表不同。
声明和定义分开时,形参默认值放到声明中。
内联函数,用inline表示。内联函数会在调用的地方展开函数代码而不是产生调用,跟宏函数一样高效,但却有明确的参数类型而且没有副作用。
内存管理:
c:malloc/free/calloc/realloc(已分配的内存调整大小),返回void*,
c++(堆里面分配内存)用new 类型 或 new 类型[元素个数] ,
delete 地址 delete[] 地址
或 new (指定地址)类型(很少用)。
new失败会throw抛出异常导致程序终止,可以用nothrow来使其像c语言一样返回NULL,加头文件<new>
古怪的关键字
and &&; or ||; not !; and_eq &=; or_eq |=; not_eq !=; bitand &; bitor |; xor ^; compl ~;xor_eq ^=
引用:本质上是指针,编译器自动取地址加星号。
定义:类型& 名字=初始值;引用必须初始化,用谁初始化它就和谁是同一体
形参在调用时用实参来初始化。
c与c++:
c语言中字符串会遇到长度定义和末尾忘记‘\0’出现乱码。
c++用string类型,头文件string,支持字符数组下表访问元素,支持+ =各种比较运算,不用考虑空间问题,函数size()和length()都可以取字符串长度,成员函数c_str()可以返回对应的c风格字符串。
数组:c数组长度一旦确定就不变,作为参数传递就会蜕变为地址无法知道长度,必须追加长度。
c++用vector<类型>数组名(长度,元素初始值),通过resize(长度)来调整大小
size()来取得元素个数。头文件<vector>
|