我无法在堆内存和 OOP 作用域之间建立联系
I can't relate between heap memory and OOP scopes
>我有一个名为Bob 的类
class Bob
{
int lol;
public:
int* returnpointer()
{
lol = 4;
return &lol;
}
};
int main()
{
Bob A = new Bob();
int * pointertoprivate = A.returnpointer();
*pointertoprivate = 10;
}
所以我的主要应该声明一个新的 Bob 实例,获取一个指向它不应该访问的私有变量的指针并更改它。这可能吗?我没有尝试编译这个。
访问说明符仅限制名称的直接使用;它们不限制通过指针间接访问成员。因此,您的代码确实允许main
修改私有成员,因为成员的名称仅与成员函数一起使用。
(或者至少会,如果所有语法错误都已修复)
无论对象是否动态分配(即它是否在堆上),都是这种情况。在C++,你应该养成避免new
的习惯,除非真正需要它。
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 如何在C++中访问作用域的变量输出?
- 重载时未在 C++ 的作用域错误中声明
- 我无法在堆内存和 OOP 作用域之间建立联系