PoEduo - C++阶段班【Po学校】-08复习C Plus Plus- 课堂笔记
Object C复习 C Plus
1-->bool
1.0 BOOL _Bool bool 3个布尔有什么区别?
1.1 看代码,回答 n的值是: A : 3 B: 1
int main() { int n = 3; bool b = n; n = b; return 0; }
答案: B
2--> const
2.0 const首先在C++中产生,C发现很好用,就拿到了C中。
2.1 const和宏的区别,const是一种编译器级别的关键字,它有3个特点:1 具有类型的常量 2 编译时分配空间 3 它是有作用域的。
2.2 使得const失效有很多方式,如其中一种:const cast<>。
2.3 非编译器级别的常量有: 1数字 10; 2字符串 “Hello World”;带双引号的字符串存储在常量区,是不可以被更改的。
2.4 const修饰的常量可以称为伪常量。使用#define定义出来的常量是真常量。
2.5 const是带有类型检测的,比如char*转int*的时候,使用define的常量,直接替换,而const修饰的常量会有提示。
2.6 const在编译时会分配空间,更方便调试。
2.7 const它是拥有作用域的,#define是全局的。
2.8 虽然define能全面代替const,但const是给程序员用的,它更易于调试,比较透明,更易于问题的定位。
3-->enum定义常量 复习
3.0 少用define,可以用enum代替。
3.1 enum和const有哪些不同: 1 enum定义出来的是真常量,const修饰的是伪常量。 2 const需要空间的分配,enum不需要分配空间,直接就是一个常数。 3 但const能做到许多enum不能做的如:一个const的指针,enum就无能为力。
4-->域作用符:: 复习
4.0 域作用符的作用: 1 命名空间 2 类 3 全局(当域作用符前面什么也没有时)
5-->new 和 delete 运算符 复习
5.0 new delete 它们是运算符,不是函数。
5.1 malloc() 和 free() 与 new delete 之间区别:malloc()不会调用构造函数,free()也不会调用析构函数。
5.2 new 和 delete 是需要成对出现的。
6-->函数重载 复习
6.0 返回值能够构成重载? A: 对。 B: 错。 答案B。 重载和函数的返回值没有关系。
6.1 1参数类型不同能构成重载,2参数的个数不同也能构成重载,3在类内部,非const版本成员函数和const版本的成员函数能构成重载。
6.2 只要函数命名粉碎后不重名,就能达到重载的目的。
6.3 再次说明: 重载和函数的返回值没有关系。
6.4 二义性的问题:类型或者被隐匿转换,或者被强制转换,更或者被提升转换,会使得函数参数和一个以上的重载的函数匹配。
6.5 默认形参值: 头文件里面初始给出一个值,注意要多个默认形参赋值,要注意顺序,从右往左。
7-->引用 复习
7.0 引用可代替指针。
7.1 引用一旦确定,就不会再被更改。
7.2 回答:看下面代码,选择答案 A:100 B: 50 。 答案:B
int main() { int n = 100; int & rn = n; int o = 50; rn = o; //此时n = ? return 0; }
7.3 引用相当于一个变量的别名
7.4 引用 在传参时,相当于传自身。
7.5 再看一个错误的引用的用法,在函数的栈内部出现的变量,出栈后就不存在了,返回它的引用是有错误的。
7.6 返回一个引用,一定要是生命同期不会被结束的,才是正确的。
8-->类型转换 复习
8.0 在C++中,如int()的C风格类型转换是强制转换,C++中有自己的一套转换风格。
8.1 1 static_cast<> 2 const_cast<> 3 reinterpret_cast<> 4 dynamic_cast<>
9-->inline 内联请求 复习
9.0 inline可以代替define的功能。
9.1 宏是一定会展开的,但inline只是对编译器发出一个请求,编译器不一定就实现inline展开。
9.2 转到反汇编,查看inline是否生效。关键看申请inline的函数有没有call,inline生效则展开来,没有call。