【C++初阶】1.类和对象 两万字深度拆解,手把手带你入门C++
前言众所周知C加加难学这主要是因为其陡峭的学习曲线。本篇是C加加的第一篇讲解C加加的第一个知识点类和对象。而这个知识点难度就是比较大的。我们将尽量使用好懂的语言以及逻辑衔接去讲解它一、引用理解给对象取别名特征必须初始化例如int a;这样的写法是错误的引用必须在定义时初始化。可以给别名取别名代码语言javascriptAI代码解释int a 1; int ra a; int rra ra;一旦引用不可引用其它的实体代码语言javascriptAI代码解释int a 20; int b 10; int ra a; ra b;可能有同学认为引用本质是指针就以为引用对象可以改。但如上代码不是改ra引用对象为b而是给本尊重新赋值。由此引用可以看作取小名一个人可以有多个小名、外号但人始终只有一个。引用作用在这里仅供了解以后会深入传参做返回值传引用返回传值返回代码语言javascriptAI代码解释void func1(int x); // 传引用 int func2(int x); // 返回引用若x较大可以提升效率。此外有意思的是引用做返回值可以直接修改本尊代码语言javascriptAI代码解释int arr[20]; int func() { return arr[2]; } int main() { func() 3; // 直接修改数组 cout arr[2]; // 输出3 return 0; }如图直接修改数组因此就能引出一个问题引用返回这么好用以后全用引用返回不就好了显然答案是否定的。将上面的代码arr定义成局部再来看看代码语言javascriptAI代码解释int func() { int arr[20]; // 局部数组 return arr[2]; // 返回局部变量的引用 } int main() { int a func(); cout a; // 打印出了随机值 return 0; }由于函数栈帧在结束后会被销毁因此也变成了随机值。const引用既然我们研究了变量a的引用那就更进一步去研究常数的引用吧代码语言javascriptAI代码解释int main() { int rc 10; // 报错 return 0; }报错了这就关系到权限的问题了。10为常数引用只能用常数const引用代码语言javascriptAI代码解释const int rc 10; // 正确权限只可缩小不可放大代码语言javascriptAI代码解释int a 10; const int ra a; // 权限缩小 ra; // 会报错 int rra a; // 权限一致 rra; // 则不会同时对表达式(ab)的引用呢代码语言javascriptAI代码解释int a 1; int b 2; int r (a b); // 神奇的报错又来了接着报错我们回顾一下临时对象由于表达式会创造出一个临时对象而临时对象有常性因此必须加const代码语言javascriptAI代码解释int a 1; int b 2; const int r (a b); // 这下就能过了同时更进一步隐式类型转换也是有常性的也要加const代码语言javascriptAI代码解释double a 3.14; const int ra a; // 正确但是注意再转一次还是要加const的代码语言javascriptAI代码解释double a 3.14; const int ra a; const double rra ra; // double rra ra; 是错的因此const引用可以让传参更加广泛。引用与指针的区别首先两者本质都是指针。在编译下两者语句一模一样。区别引用不开空间指针开空间指针可以空引用不能代码语言javascriptAI代码解释int* p NULL; int rp *p; // 这样的代码会崩溃 rp;因此有野指针但很少有野引用sizeof语句返回值不同代码语言javascriptAI代码解释int a 1; int* pa a; int ra a; cout sizeof(pa) endl; // 在64位下为8 cout sizeof(ra) endl; // 输出4int的大小引用对象不可变参考上文引用可以直接访问指针要解引用二、Inline 内联在开始讲之前先回顾一下C的宏代码语言javascriptAI代码解释#define ADD(a, b) ((a) (b))有没有最后的分号外大括号内大括号为什么这样在C中内联可以代替宏代码语言javascriptAI代码解释inline int Add(int a, int b) { return a b; }作用与宏类似在使用时展开让效率更高但实则智能得多。特征debug默认不展开这也意味着可以对其进行调试。是否展开取决于编译器做个计算一个100行的语句被调用10000次全部展开会是100 * 10000条不展开会是100 10000条全部展开会让程序臃肿。注意声明定义要放在一个文件中否则会报错三、nullptr (C11)简单说就是C版本的空指针。但C语言就有NULL了为什么要新弄一个新的关键字nullptr呢NULL的本质一个定义为0的宏
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2581211.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!