C++怎么访问私有变量和函数

用指针呀,了解C++内存结构的话。

 

1. 对于私有成员变量,可以用指针来访问。

 

2. 对于虚函数,也可以用指针来访问。

 

3. 另外,对于私有成员,如果摸不准地址构造,可以先构造一个结构相似的类,然后增加一个公有函数获得内容,然后指针转换,并且用公有函数来访问。

#include <stdio.h>  
 
class A  
{  
private:  
    char *str;  
public:  
    A(): str("nothing"){};  
};  
 
class B  
{  
private:  
    char *str;  
public:  
    B(): str("nothing"){};  
    char *get()  
    {  
        return str;  
    }  
};  

 

4. 最后,就是直接定义一个相似的类,然后把私有变成公有,然后强转指针来访问。

但是注意,只对变量有效,对函数无效。

#include <vector>
#include <iostream>

using namespace std;

class A {
public:
    A(int i):a(i){}
private:
    void print() {cout<<"A"<<endl;}
    int a;
};

class B {
public:
    void print() {cout<<"B"<<endl;}
    int a;
};

int main() {

    A a(6);
    B *b = (B*)&a;
    b->print();
    cout << b->a << endl;

    return 0;
}

 

对于类函数(除了上面提到虚拟函数),想要访问,其实就要知道代码区的分布了吧。

 

那么A类的foo函数和B类的foo函数,如果参数列表一致,怎么区分它们呢?用A类的一个对象调用成员函数,这个成员函数用到成员变量,怎么知道是在用这个对象的数据呢?
这个解释,就是this指针。A类的foo(int,int)函数,已经被编译器编译成_foo_A*_int_int,也就是说隐含已经加入了函数所属类的信息,调用A类对象a.foo的时候,已经在调用foo(const A * this,int,int)这个函数。
这也解释了,为什么在成员函数内部,使用成员变量,有时候(并不是全部情况下都如此)前面加this和不加this没有区别,编译器已经把foo里面用到的成员变量,用this指针指向了。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值