zoukankan      html  css  js  c++  java
  • 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指针指向了。
  • 相关阅读:
    Postman模拟后端服务(mock server)
    Fiddler常用的几个功能
    Postman常用的几个功能
    Postman常用功能详解,常用请求方法
    sql小技巧
    postman接口数据关联
    postman批量发送多个请求
    sql去重查询语句
    pytho接口自动化-session
    charles抓包使用教程
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6505362.html
Copyright © 2011-2022 走看看