友元函数重载运算符>>
时间: 2023-10-28 21:03:17 浏览: 88
重载运算符>>的友元函数通常被用于从输入流中读取数据并将其存储到对象中。以下是一个示例:
```
class MyClass {
private:
int data;
public:
MyClass() {
data = 0;
}
friend istream& operator>>(istream& input, MyClass& obj) {
input >> obj.data;
return input;
}
};
```
在上面的代码中,我们定义了一个名为MyClass的类,并重载了运算符>>。重载函数的第一个参数是一个istream对象,它表示输入流,第二个参数是一个MyClass对象的引用,它表示要将数据存储到的对象。函数的返回类型是一个istream的引用,以便支持级联输入操作。
在函数内部,我们使用输入流对象提供的运算符>>来读取数据,并将其存储到对象的数据成员中。最后,我们返回输入流对象的引用,以便支持级联输入操作。
使用重载运算符>>的友元函数,可以方便地从输入流中读取数据并将其存储到对象中。例如,我们可以使用以下语句从标准输入流中读取一个整数并将其存储到一个MyClass对象中:
```
MyClass obj;
cin >> obj;
```
相关问题
成员函数重载运算符和友元函数重载运算符区别
成员函数重载运算符和友元函数重载运算符的主要区别在于它们可以访问的数据成员不同。
成员函数重载运算符是类的成员函数,它们可以直接访问类的私有成员和保护成员。因此,当我们需要重载某些需要访问类的私有成员和保护成员的运算符时,我们通常会使用成员函数重载运算符。
而友元函数重载运算符不是类的成员函数,它们不能直接访问类的私有成员和保护成员。它们可以被声明为类的友元函数,从而获得访问类的私有成员和保护成员的权限。因此,当我们需要重载某些不能直接访问类的私有成员和保护成员的运算符时,我们通常会使用友元函数重载运算符。
综上所述,成员函数重载运算符和友元函数重载运算符在访问类的成员方面有所不同,开发者需要根据具体的需求选择适合的方式。
c++友元函数重载运算符
在C++中,可以使用友元函数来重载运算符。友元函数是一个独立于类的函数,但可以访问类的私有成员。重载运算符需要在友元函数内部实现。
例如,考虑一个名为Complex的类,该类代表复数。我们可以定义一个友元函数来重载加法运算符:
```
class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i = 0) {
real = r;
imag = i;
}
friend Complex operator+(const Complex& c1, const Complex& c2);
};
Complex operator+(const Complex& c1, const Complex& c2) {
Complex res;
res.real = c1.real + c2.real;
res.imag = c1.imag + c2.imag;
return res;
}
```
在上面的例子中,我们定义了一个友元函数operator+来重载加法运算符。这个函数使用const引用作为参数,因为我们不想修改传递进来的复数对象。友元函数可以直接访问类的私有成员变量,因此我们可以通过real和imag成员变量来计算两个复数对象的和。
然后,我们可以在主函数中使用加法运算符来实现两个复数对象的加法:
```
int main() {
Complex c1(3, 4);
Complex c2(2, 7);
Complex c3 = c1 + c2;
std::cout << "Real part: " << c3.real << ", Imaginary part: " << c3.imag << std::endl;
return 0;
}
```
上面的代码会输出:Real part: 5, Imaginary part: 11,这是两个复数对象的和的实部和虚部。注意,我们使用operator+来实现加法运算符,这是因为我们使用了友元函数来重载它。
阅读全文