学过c后的c++学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 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
析构函调用的问题:如果返回也是带析构函数的类,它会调用一次该类的析构函数

猜你喜欢

转载自blog.csdn.net/qq_41942774/article/details/82382646