运算符“>”被友元重载,则表达式"obj1>obj2"被编译器解释为() A operator>(obj1,obj2) B >(obj1,obj2) C obj2.operator>(obj1) D obj1.operator>(obj2)
时间: 2024-05-31 22:14:26 浏览: 142
如果运算符">"被友元重载,则表达式"obj1>obj2"被编译器解释为选项D:obj1.operator>(obj2)。因为友元函数是在类外部定义的,所以它不属于类的成员函数,不能使用"obj2.operator>(obj1)"这种形式。而且,由于运算符">"被重载为友元函数,因此可以访问类的私有成员。
相关问题
友元运算符 obj1<obj2 被 C++编译器解释为(D)。 A.obj1.operator<(obj2) B.<(obj1,obj2) C.obj2.operator<(obj1) D.operator<(obj1,obj2)
正确答案是 D.
友元运算符是在类外部定义的,它不属于任何类的成员函数,因此不需要使用成员访问运算符来调用。友元运算符的语法形式是:
```
friend 返回类型 operator op(参数列表);
```
其中,op表示要定义的运算符,可以是任何C++中已有的运算符,也可以是自定义的运算符。返回类型和参数列表与普通函数的定义相同。
当使用友元运算符比较两个对象时,编译器会将表达式`obj1 < obj2`解释为`operator<(obj1, obj2)`,即调用全局的友元运算符函数进行比较。因此,答案为D。
友元函数重载运算符>>
重载运算符>>的友元函数通常被用于从输入流中读取数据并将其存储到对象中。以下是一个示例:
```
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;
```
阅读全文