【QandA C++】引用、指针、重写、重载、重定义、public、protected、private、友元、深浅拷贝、new、malloc、nullptr、NULL、析构函数等重点知识汇总

目录

引用和指针的区别

重写、重载、重定义

public/protected/private

友元

深拷贝和浅拷贝

new和malloc

指针数组、数组指针

常量指针、指针常量

nullptr和NULL

什么是析构函数


引用和指针的区别

  1. 指针是一个实体, 需要分配内存空间, 而引用是一个变量的别名, 不需要分配内存空间
  2. 引用在定义的时候必须初始化, 并且一旦初始化后不能再改变所引用的变量. 指针在定义的时候不一定要初始化, 并且指向的内存空间是可变的
  3. 引用不能为空, 引用必须与合法的存储单元关联, 而指针可以空(所以使用指针的时候需要注意野指针的问题)
  4. 指针有多级指针的概念, 而引用没有多级引用这样的概念
  5. 指针和引用的自增运算结果也不一样, 指针是指向下一个对象, 引用是我引用的值+1
  6. sizeof 引用, 得到的是所引用的变量的大小. sizeof 指针, 得到的是指针本身的大小(32位, 4字节/64位, 8字节)
  7. 引用的底层是通过指针来实现的(汇编的角度) (有争议!!!)
指针变量加1,即向后移动1个位置表示指针变量指向下一个数据元素的首地址。
    而不是在原地址基础上加1。
**至于真实的地址加了多少,要看原来指针指向的数据类型是什么。**
--------------------------------------------------------------------------
char a = 'a';
char *p = &a;
cout<<(void*)p<<" "<<(void*)(p+1)<<endl;
输出:0012FF33  0012FF34
p指向的是一个字符,p+1就是移动一个字符大小,
一个字符就是一个字节,所以p + 1 代表的地址就比 p 代表的地址大1。
--------------------------------------------------------------------------
--------------------------------------------------------------------------
int i = 1;
int *p = &i;
cout<<(void*)p<<" "<<(void*)(p+1)<<endl;
输出:0012FF30  0012FF34
p指向的是一个整型,p+1就是移动一个整型大小,
即移动4个字节,所以p+1代表的地址比p代表的地址大4.

重写、重载、重定义

重载:

  1. 俩个函数在同一个作用域中
  2. 函数名相同, 参数列表不同(参数的个数, 参数的类型, 参数的顺序)
  3. 重载和俩个函数的返回值是否一样无关

重写(覆盖):

  1. 若子类中有一个和父类完全相同的虚函数(返回值类型相同, 函数名相同, 参数列表完全相同), 此时叫做子类的虚函数重写了父类的虚函数
  2. 虚函数重写的俩个特例</
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珠江上上上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值