gpt4 book ai didi

c++ - 我对友元函数的理解

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:22 25 4
gpt4 key购买 nike

有时,非成员函数可能需要访问它作为参数接收的私有(private)成员。friend 函数是一个非成员函数,它提供对其好友类的私有(private)访问。

Class X{
int number;
public:
X& operator+=(const X& rhs);//a += b is a.operator(b)
friend int& operator+=(int& addthis, const X& rhs);//add this += b is I don't know what lol
}
X& operator+=(const X& rhs){
this->number = this->number + rhs.number;
}
int& operator+=(int& addthis, const X& rhs){
addthis = addthis + rhs.number;
return *this;
}

我读到的是,如果我想对对象object += int 执行+=,只需重载+=运算符,但是如果 int 出现在对象之前怎么办。说 int += object?我不得不将它写成一个 friend 函数,这就是我有点迷路的地方。为什么我不能把 int& operator+=(int& addthis, const X& hrs); 写成成员函数?我假设 friend 函数可以与其他类一起使用,因为它是一个非成员函数,所以它没有分配给任何特定的类?

很抱歉,我只是不明白为什么我会使用 friend 函数而不是将其设为成员函数。真的很感激任何反馈,谢谢。

最佳答案

您可以通过类 X 中的用户定义转换为 int 和其他整数类型启用 operator+=:

struct X{
int number;
operator int() const
{
return number;
}
//...
}

当然,这不会为您提供与您的 friend 方法完全相同的行为,因为其他函数也可以使用转换。不过,我想这就是您要查找的内容,否则您还需要定义 operator-=operator*= 等等。

关于c++ - 我对友元函数的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34372579/

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