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指针指向了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!