gpt4 book ai didi

c++ - 通过作为另一个类的成员函数的友元函数设置值

转载 作者:行者123 更新时间:2023-11-30 05:13:08 25 4
gpt4 key购买 nike

setwidth()Box 类的成员函数,也是 Sbox 类的友元函数,用于设置两个类的成员 width

Sbox 类的 width 的值设置/输出不正确。

#include<iostream>

using namespace std;

class Sbox;

class Box{
private:
double width;
public:
friend void printwidth(Box box);
void setwidth(Sbox sbox, double wid);
};

class Sbox {
private:
double width;
public:
friend void Box::setwidth(Sbox sbox, double wid);
void printwidth() {
cout << "the width of small box: " << width; //this value is coming wrong
}
};

void Box::setwidth(Sbox sbox, double wid) {
width = wid;
sbox.width = wid;
}

void printwidth(Box box) {
cout << "width of the box: " << box.width << endl;
}

int main() {
Box box;
Sbox sbox;
box.setwidth(sbox, 10.77);
printwidth(box);
sbox.printwidth();
return 0;
}

最佳答案

您需要通过引用传入 Sbox。将 & 符号添加到这三行。

void setwidth(Sbox& sbox,double wid);

friend void Box::setwidth(Sbox& sbox,double wid);

void Box::setwidth(Sbox& sbox,double wid)

您按值传递了您的 sbox,这意味着制作了一个拷贝以在 setwidth 中使用。然后,您的代码会更改 sbox 拷贝的宽度,但拷贝会在 setwidth 结束时被销毁,而原始的 sbox 会在外面功能保持不变。

添加 & 意味着 Sbox 参数通过引用传递,这意味着永远不会创建拷贝,因此 sbox setwidth 内部与外部是同一个对象。

在这里阅读:How to pass objects to functions in C++?

关于c++ - 通过作为另一个类的成员函数的友元函数设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084104/

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