版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41942774/article/details/82382646
该内容为我学习完c后学c++时所作的笔记,所以可能有点杂乱(~~~)
未完!
计算数组的长度
sizeof()指出整个数组的长度,strlen()是字符串的长度,不包括空字符。
cin是istream的一个对象
cin.width(常); //设置接下来输出的长度,仅仅是接下的一次输出。
cin>>变量; //保留回车字符在输入流中
cin.getline(字符串数组名,读取的数量); //将会车变成0读入
cin.get(字符串数组名,读取的数量); //保留回车字符在输入流中;
另一重载: cin.get(字符) //读取一个字符。该方法返回一个cin对象,在需要时会转换bool类型。如判断输入是够合法时。
另一重载 :cin.get(无) //会读取下一个字符无论是什么。该方法返回读取的字符。
string类
可以通过“+”“=”来赋值,可以用cout和cin来对string进行输入输出。
string也可以和数组那样——s[0] 使用。
结构体初始化
和数组一样,用{······,······}
初始化结构体的初始值比成员少,余下的成员将被初始化为0
原始字符(raw)
在原始字符中,字符表示的就是自己。\n不表示换行,而是“\”“n”两个字符
格式为:R“+(········)+”
new运算符与delete运算符
typeName *pointer_name = new typeName;
如:int *p=new int ;
释放new分配到内存:delete pointer_name;
如:delete p;
用new动态分配数字内存:
typeName *pointer_name = new typeName [size(可以为常量也可以为变量)]
如:int *p=new int [a];
delete释放:delete [] pointer_name;
如:delete []p
//注意 **[]**在前
使用new和delete规则: 来自c++ primer plus
1.不要使用delete来释放不是new分配的内存。
2.不要使用delete释放同一个内存块两次。
3.如果使用new为一个实体分配内存,则应使用 delete(没有方括号)来释放。
4.如果使用new [] 为数字分配内存,则应使用 delete [] 来释放。
5.对空指针使用delete是安全的。
如果给cout提供一个指针,它将打印地址。但如果指针类型为char*型,则cout将显示指向的字符串。如果要显示的是字符串的地址,则必须将这种指针强制转换为另一种指针类型。
strcpy()与strncpy()
strncpy有第三个参数接受要复制的最大字符数。
注意如果该函数在到达字符串结尾之前,目标内存已经用完,则它将不会添加空字符,在最后应该手动添加,
如:数组为a[10]则为a[9]='\0'; 。
模板类
vector:声明:vector<typeName>vt(N);
//创建一个名为vt的vector对象,它可以存储N个类型的typeName的元素其中N可以是整形常量,也可以是整形变量。
array: 声明:array<typeName,N>arr;
//创建一个名为arr的array对象,它包含N个类型的typeName的元素其中N只能是是整形常量。
··在c++11中可将列表初始化用于vector和array对象(和初始化数组一样)。但在c++98中不能对vector对象这样做。
··在声明这两种对象后,可用访问数组一样访问各个元素(将对象名看成数组名)
··可以将一个array对象赋给另一个array对象。
文件
包含fstream头文件
创建ofstream(写入文件)或者ifstream(读取文件)对象
将对象与文件关联:对象.open("文件名")。读取文件时需注意若文件不存在,则会打开失败的问题,所以应该添加判断。用:对象.good();如果打开文件则返回ture;
像cout和cin一样操作文件。如:写入文件:while(cin.get(s)){对象<<s;}
如果要读取空字符需要:对象>>noskipws
函数指针
声明:double (*pf)(int );//pf为指向一个返回值为double,参数传递了一个int的函数指针
也可以用c++11的自动类型推断功能。auto 函数指针=函数名。
double (*pf[n])(int );函数指针的数组
auto不能声明函数指针数组,他只能用于单值初始化,不能用于列表初始化,但声明了一个的时候,可以用 auto pb=pa;//pa为指向函数指针的指针。
内联函数声明:原函数声明上加上inline
引用
类型 & 引用名=被引用名(变量)。如:int & a=b;
在引用参数为const的条件下():(const int &a);
引用只能在声明的时候初始化
引用与实参类型不匹配的时候将创建临时变量,相当于是传递的值
引用与实参类型相同,但不为左值(字面常量:1,2;表达式)也会创建临时变量
对于带参数列表的方法(给传入的参数设定默认值,若使用方法的时候,没有传入值,则使用默认值),必须从右向左添加默认值,也就是说,要为某个参数设置默认值,则必须为它右边的所有参数提供默认值。//设置默认参数是在声明的时候
函数模板
template <class T> //或template <typename T>
void swap_ture(T &a, T &b)
{
T temp;
temp = a;
a = b;
b = temp;
}
构造函数(没有返回值)
初始化对象:类名 对象名 = 类名(也是构造函数名)(传入的参数)或者 类名 对象名 (传入的参数)
写了构造函数就必须提供默认构造函数
如果构造函数使用了new,则应使用delete的析构函数。
作用域内枚举
enum class 枚举类型名 {one ,twe};
枚举类型名 枚举名=枚举类型名::one;
运算符重载
运算符左边的调用对象,右边为传递参数的对象。声明为:在普通函数声明条件下,将函数名改为 :operator 运算符
友元函数
将函数的声明放在类中并在前加上friend。友元函数不是类的成员函数,不能通过成员运算符来调用,但它与成员函数的访问权限相同
提示
一定要在对指针应用解除引用运算符(*)之前。将指针初始化为一个确定的,适当的地址。
逗号运算符的优先级是最低的
如果用cin出现非法输入,则接下来的输入将不会执行,且非法的内容将保留在缓存区,若需继续输入需要用cin.clear()重置输入
对数组名取地址将返回整个数组的地址
为了防止对头文件进行了多重引用,可以用条件编译
函数的重载不区分const(当const的属性为是否能改变原来的值时)
只要类方法不修改调用对象,就应该将其声明为const方法:在定义与声明后加上const
析构函调用的问题:如果返回也是带析构函数的类,它会调用一次该类的析构函数