0

我有一堂叫鲍勃的课

class Bob 
{
   int lol;

 public:
   int* returnpointer()
   {
     lol = 4;
     return &lol;
   }
};

int main()
{
  Bob A = new Bob();
  int * pointertoprivate = A.returnpointer();
  *pointertoprivate = 10;
}

所以我的 main 应该声明一个 Bob 的新实例,获取一个指向它不应该访问的私有变量的指针并更改它。这可能吗?我没有尝试编译这个。

4

1 回答 1

4

访问说明符仅限制直接使用名称;它们不限制通过指针对成员的间接访问。因此,您的代码确实允许main修改私有成员,因为成员的名称仅与成员函数一起使用。

(或者至少会,如果所有语法错误都已修复)

无论对象是否被动态分配(即它是否在堆上)都是如此。在 C++ 中,您应该养成避免使用的习惯,new除非真正需要它。

于 2013-10-21T17:56:27.843 回答