gpt4 book ai didi

c++ - 对象和数据成员内存地址困惑

转载 作者:行者123 更新时间:2023-11-30 02:39:29 24 4
gpt4 key购买 nike

当我们在类内声明一个同名的数据成员以及同一个类内的函数参数时,我们使用“this->”来指向该类的内存位置.我感到困惑的是:假设我们声明了一个名为“meloncolor”的数据成员,然后在类中声明了一个同名的函数参数,例如:

class fruitcolor{
public:
string meloncolor;
void changefruitcolor(string meloncolor)
{ this-> meloncolor = meloncolor }
};

假设我们的对象存储在内存位置 0xblahblahblah,那么“moloncolor”数据成员/变量应该位于同一位置?如果是这样,如果程序/计算机存储在同一位置,使用“this->”指向类地址后,程序/计算机如何区分彼此?

最佳答案

"What's in a name? That which we call a rose By any other name would smell as sweet."

概念

对象 没有名称。对象是内存中某种类型的位置,大小符合该类型,具有可能由标识符引用的值(已分配/未分配)。

命名空间 是一组符号/标识符,它为特定标识符提供了一定程度的方向,从而可以区分相同的标识符。命名空间提供了一种机制,其中具有相同符号名称的标识符可以共存(共存)而不会冲突/覆盖/隐藏。

解释

在您的特定情况下,参数 meloncolor 和实例成员 meloncolor 指的是具有相同符号名称但在不同命名空间中的不同对象。函数的局部变量和参数具有函数级作用域并具有局部 namespace 。任何名称与全局或类/结构 namespace 冲突的变量/标识符都将被覆盖。为了明确区分,我们需要使用范围级分辨率。例如 C++ 中的实例变量,我们使用成员选择运算符 . 来对当前对象实例中定义的符号进行名称解析。

关于c++ - 对象和数据成员内存地址困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29815195/

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