C++ PrimerPlus部分知识点总结(1-12)(个人总结,仅供参考)

来源: 魏洪昌的日志

 

 表: climits 中的符号常量 P40

C++转义序列的编码 P48

完全匹配允许的无关紧要转换 P255

5种变量存储方式 P271

cout<<hex; 不显示任何内容,将cout显示整数的方式改为十六进制;cout<<oct; 八进制;P45

cout.put(ch); 显示一个字符 P46

cin 使用空白(空格、制表符和换行符)来定字符的界

cin.getline() 将丢弃换行符 cin.getline(str,20); 最多读取20-1个字符 P73

cin.get() 将换行符保留在输入序列中 cin.get(ch); cin.get(str,20);

cin>>ch; 读取char值时,将忽略空格和换行符 P136

cin.get(ch); 可读取空格和换行符 P136

cin.clear(); P79 重置cin,删除错误输入 P169

getline(cin,str); P80

struct 定义结构的关键字 struct name{……};P81

union 定义共用体的关键字 union name{……};P87

enum 定义枚举的关键字 enum name{……};P88

static 静态存储关键字

template 模板关键字 template <class Any> void swap(Any a,Any b){……} P246 P508

register 寄存器局部变量关键字 register int a; 但编译器并不一定会满足这个请求P268

auto 局部变量关键字,可省略 P268

static 静态变量关键字 P270;可将局部变量声明为静态变量P275;用于函数表明只能在该文件内调用这个函数P278

extern 引用声明关键字 应用已有变量 extern int a; P272

typedef 创建别名关键字 typedef char newname; P133

Inline 内联函数关键字 inline double square(double x){return x*x;}

volative mutable关键字 P27

strlen(数组名) 只计算可见字符,而不是数组本身的长度,不把空字符计算在内,不能用于字符串 P71

sizeof();对数组得到的是数组的长度;对指针得到的是指针的长度而不是其所指数组的长度 str.size();字符串的长度

对字符串来说.size()和.length()一样。

& 地址操作符 * 间接值或解除引用操作符 &声明应用 int &a=b;必须在声明应用的同时进行初始化

new 分配内存 int *pt = new int; int *ps= new int[10]; P94

delete 释放内存 delete pt; delete []ps; P94

strcpy(str1,str2);将str2中的字符串复制给str1; strncpy(str1,str2,10); 最多复制前10个字符到str1; P104

const 限定符const int MONTH =12;不允许再修改其值; 若声明时没有赋值,则其值是不确定的且无法修改 P51

void show(const int ar[]) {……} 意味着不能在此函数内用ar修改数组中的数据P196

const int* pt=&age; 不能通过*pt修改age的值 P196

C++禁止将const的地址赋给非const的指针 P196

int *const pt=&age; 表明指针pt只能指向age,不能更改 P196

void show(const int &a); 不能修改a 的值

const int * const a= &b;第一个const防止b被修改,第二个const确保指针a始终指向b P272

逗号表达式的值是第二部分的值,逗号表达式的优先级最低

字符串有内置的结束字符,不以空值字符’\0’结尾的char数组只是数组,而不是字符串

函数名是函数的地址 P127

对于带参数列表的函数,必须从右向左添加默认值,实参按从左到右的顺序依次赋给相应的形参,而不能跳过任何参数 P241

using 声明会导致两个相同名称发生冲突,using编译指令会隐藏名称空间版本P286; 嵌套名称空间 P287

类对象的默认访问控制是private,类中数据的默认访问类型是private,结构的默认访问类型是publicP302

定义位于类声明中的函数将自动生成内联函数,在类声明外定义是成员函数可以使用inline限定符使其成为内联函数。 P304

如果构造函数使用了new,则必须提供使用delete的析构函数。 P318

const Stock & top (const Stock & ) const; 括号中的const表明该函数不会修改被显式的访问对象,括号后的const表明该函数不会修改被隐式的访问的对象,函数返回了两个const对象之一的引用,因此返回类型也应为const引用。 P319

this 是一个指针,指向用来调用成员函数的对象。 P319

在类中用static定义的常量和枚举类型将与其他静态变量存储在一起,而不存储在对象中。P319

重载操作符函数格式 operator op (argument_list); P336

不要返回指向局部变量或临时对象的引用,函数执行完毕后,局部变量和临时对象将消失,引用将指向不存在的数据。 P338

重载操作符必须至少有一个操作数是用户定义的类型,不能修改操作符的优先级,不能定义新的操作符。 P341

友元函数将原型声明放在类声明中,原型声明前加关键字friend ,定义中不能使用friend,类的友元函数是非成员函数,其访问权限与成员函数相同。 P346

只有接受一个参数的构造函数才能成为转换函数,在前面加上关键字explicit 将关闭自动转换特性,防止隐式转换。explicit Stone (double); P365

转换函数将类转换为其他某种类型,必须是类方法,不把指定返回类型,不能有参数。 operator double(); P368

static int num; 静态类成员无论创建多少对象,程序只有一个静态变量副本,类的所有对象共享同一个静态成员,可用来计算创建了多少个对象。 P379

静态成员是整型或枚举型const时,可以在类声明中初始化,否则应在类声明之外用单独的语句进行初始化。int String::num=0; P380

在构造函数中使用new来分配内存,要初始化指针或设为空指针,并且必须在相应的析构函数中使用delete来释放内存。 P381

如果定义了构造函数,C++不会提供默认构造函数,所有参数都有默认值的构造函数是默认构造函数,但只能有一个默认构造函数。 P384

构造函数使用new的类应定义以个重载赋值操作符的类成员函数。 P392

复制构造函数用于将一个对象复制到新创建的对象中,用于初始化过程中,而不是常规赋值过程中,C++可以提供默认的复制构造函数,但复制的是成员的值,如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针。P387

静态成员函数声明时用static,定义是则不用static,不能通过对象调用静态成员函数.静态函数只能使用静态数据成员,若是在public中声明的,可以使用类名和作用域解析操作符来调用它。 P392

如果有多个构造函数,必须以相同的方式使用new,以兼容析构函数P397

产生随机数:<cstdlib> <ctime> strand(time(0)); int a= rand()%b; [0,b) P402

对于使用布局new操作符创建的对象,应以与创建顺序相反的顺序进行删除。

car * a= new char[31]; object * p = new (a)object; delete p; delete [] a; P407

对于const或被声明为引用的类成员,必须在构造函数中使用初始化列表句法初始化它。P413

在类声明中声明的结构、类或枚举被称为被嵌套在类中,其作用域为整个类。这种声明不会创建数据对象,而只是指定了可以在类中使用的类型,不会与其他地方同名的结构、类或枚举冲突。 P413

你可能感兴趣的:(C++,struct,object,delete,存储,编译器)