内存函数地址const属性操作浅谈

#include<iostream>
#include<string.h>
using namespace std;
class A
{
public:
    static void f1(){ cout<<"f1"<<endl; }
    void f2(){ cout<<"f2"<<endl; }
    void f3(){ cout<<num<<endl; }
    virtual void f4() {cout<<"f4"<<endl; }
public:
    int num;
};
 
int main(int argc,char* argv[])
{
	A* pa = NULL;
	pa->f1();	//正常
	pa->f2();   //正常
	pa->f3();   //错误,提示段错误
	pa->f4();   //错误,提示段错误
    return 0;
}

分析

  1. pa->f1(); //正常 因为f1不需要this指针所以不影响调用f1
  2. pa->f2(); //正常 虽然需要this指针但是因为f2里面没有调用任何变量所以不会出现问题
  3. pa->f3(); //错误 因为调用了类变量 相当于null->num的调用所以肯定会造成段错误
  4. pa->f4(); //错误 因为调用了虚函数表指针 相当于 null->虚函数表指针所以也会造成段错误

同一类的不同对象,在调用相同的成员函数时,他们的入口地址是否相同?

是相同的因为他们都存在了代码区

什么样的机制来保证他们同时调用的时候不冲突,并且输出是各自的结果的?

用this指针来保证他们的数据数据不发送冲突,因为传入的是不同this指针,所以得到的是不同的变量

const对象

存储位置
const全局变量存在只读数据段
const局部变量存在栈上,出作用域删除

指针类型[函数也可以理解成为地址]
根据c++最小权限原则 [可以理解为const 对象权限变小是下级,非const权限大是上级 , 指针是工资]
const对象指针不能赋给非const对象指针 [下级不会给上级发工资]
非const对象指针可以赋给非const对象指针[上级可以给发工资]
const函数不能调用非const函数[下级不会给上级发工资]
非const函数可以调用const函数[上级可以给发工资]

非指针类型
非const变量赋给const变量是不行的,因为const变量在初始化的时候就确定了是只读的就不能在进行修改数据,你进行赋值等于就是修改数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值