内存函数地址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变量在初始化的时候就确定了是只读的就不能在进行修改数据,你进行赋值等于就是修改数据

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章