gpt4 book ai didi

C++ 私有(private)真的是私有(private)的吗?

转载 作者:IT老高 更新时间:2023-10-28 21:59:11 24 4
gpt4 key购买 nike

我正在尝试 C++ 中 private 访问说明符的有效性。如下:

界面:

// class_A.h

class A
{
public:
void printX();
private:
void actualPrintX();
int x;
};

实现:

// class_A.cpp
void A::printX()
{
actualPrintX();
}

void A::actualPrintX()
{
std::cout << x:
}

我将它内置到静态库 (.a/.lib) 中。我们现在有一个 class_A.h 和 classA.a(或 classA.lib)对。 我编辑了 class_A.h 并从中删除了 private:

现在在另一个 classTester.cpp 中:

#include "class_A.h"    // the newly edited header

int main()
{
A a;

a.x = 12; // both G++ and VC++ allowed this!
a.printX(); // allowed, as expected
a.actualPrintX(); // allowed by G++, VC++ gave a unresolved linker error

return 0;
}

我知道在篡改库的标题后,所有的赌注都被取消了(我的意思是,系统完整性等)尽管方法很老套,但这真的允许吗?有没有办法阻止这个?还是我在这里做错了什么?

最佳答案

private 不是一种安全机制。这是一种传达意图和隐藏程序其他部分不需要知道的信息的方式,从而降低了整体复杂性。

拥有两个不同的头文件不符合标准,因此从技术上讲,您进入了未定义的行为领域,但实际上,正如您所发现的,大多数编译器不会在意。

关于C++ 私有(private)真的是私有(private)的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273091/

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