gpt4 book ai didi

c++ - 在C++中按引用调用或按值调用

转载 作者:行者123 更新时间:2023-12-02 10:36:30 25 4
gpt4 key购买 nike

我是C++初学者,我了解按引用或值进行调用的基本思想。但是在以下情况下,无论是按引用还是按值调用,我都感到困惑。我正在阅读别人的代码,并且通过剪切其他逻辑来简化它,只保留显示它是按引用还是按值调用的逻辑。

这是代码

class Profile
{
public:
int test = 1;
Profile() {}
Profile(const Profile& original) // create a reference original and then assign the object (*aProfile) to it
{
*this = original;
}
void change()
{
test = 2;
}
};

class Asset
{
public:
Profile theProfile;
Asset() {}
Asset(Profile *aProfile) // aProfile should be a pointer points to Profile
{
theProfile = Profile(*aProfile); // create another object by (*aProfile)
theProfile.change();
}
};


int main() {
Profile test; // create the object test
Asset a(&test); // take the address of test as argument
}

我的问题是,为什么a.theProfile与测试不同?据我了解,Profile是(* aProflie)的引用,而aProfile是指向测试对象的指针,这意味着它们共享一个相同的地址。如果此地址中的test更改了,为什么test.test没有更改为2?

谁能帮我理解这一点?谢谢!

最佳答案

this是指向调用对象的指针。因此,为了分配给对象,必须取消引用this指针。 Asset构造函数按值获取Profile指针,当取消引用该指针以将其传递给Profile构造函数时,所指向的对象将通过引用传递。

关于c++ - 在C++中按引用调用或按值调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60066666/

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