gpt4 book ai didi

c++ - 我可以在不使用 friend 的情况下从类外访问私有(private)成员吗?

转载 作者:IT老高 更新时间:2023-10-28 13:20:40 36 4
gpt4 key购买 nike

免责声明

是的,我完全清楚我所问的完全是愚蠢的,任何想在生产代码中尝试这种事情的人都应该被解雇和/或 Gunicorn 。我主要是看能不能做。

现在已经不碍事了,有没有办法从类外部访问 C++ 中的私有(private)类成员?例如,有没有办法通过指针偏移来做到这一点?

(欢迎幼稚和其他非生产就绪技术)

更新

正如评论中所述,我问这个问题是因为我想写一篇关于过度封装(以及它如何影响 TDD)的博文。我想看看是否有办法说“即使在 C++ 中,使用私有(private)变量也不是 100% 可靠的强制封装方式”。最后,我决定更多地关注如何解决这个问题,而不是为什么它是一个问题,所以我没有像我计划的那样突出这里提出的一些东西,但我仍然留下了一个链接。

无论如何,如果有人对它是如何产生的感兴趣,这里是:Enemies of Test Driven Development part I: encapsulation (我建议在你认为我疯了之前先阅读它)。

最佳答案

如果类包含任何模板成员函数,您可以专门化该成员函数以满足您的需要。即使最初的开发者没有想到。

安全.h

class safe
{
int money;

public:
safe()
: money(1000000)
{
}

template <typename T>
void backdoor()
{
// Do some stuff.
}
};

main.cpp:

#include <safe.h>
#include <iostream>

class key;

template <>
void safe::backdoor<key>()
{
// My specialization.
money -= 100000;
std::cout << money << "\n";
}

int main()
{
safe s;
s.backdoor<key>();
s.backdoor<key>();
}

输出:

900000
800000

关于c++ - 我可以在不使用 friend 的情况下从类外访问私有(private)成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/424104/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com