c++重载运算符>>
时间: 2023-07-19 10:06:00 浏览: 118
C++中,可以通过重载运算符`>>`来实现对输入流的重载,使得我们可以使用`cin`等输入流对象来输入我们自定义的数据类型。通常的函数原型如下:
```c++
istream& operator>>(istream& is, Type& obj);
```
其中,`is`表示输入流对象,`Type`表示我们自定义的数据类型,`obj`表示我们需要输入的对象。该函数返回值为输入流对象的引用,通常返回`is`即可。
例如,我们需要重载`>>`运算符来输入一个名为`Person`的类的对象,可以这样实现:
```c++
class Person {
public:
friend istream& operator>>(istream& is, Person& p) {
is >> p.name >> p.age;
return is;
}
private:
string name;
int age;
};
```
在这里,我们使用了`std::cin`作为输入流对象,来输入`Person`类的对象`p`的`name`和`age`成员变量。返回的是输入流对象的引用`is`。
相关问题
C++中string类的重载运算符>>的实现
C++中的string类重载运算符>>的实现通常是使用流输入运算符>>来完成的,如下所示:
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cout << "Enter a string: ";
cin >> str;
cout << "You entered: " << str << endl;
return 0;
}
```
在上述代码中,使用`cin >> str`来读取用户输入的字符串,并将该字符串赋值给变量`str`。这是因为`string`类重载了输入运算符`>>`,使得它可以像普通类型一样使用。具体实现可以参考`istream`类的`operator>>`定义:
```c++
istream& operator>>(istream& is, string& s) {
s.clear();
for(;;) {
int c = is.get();
if (isspace(c))
break;
s.push_back(c);
}
return is;
}
```
该运算符将输入流(即`cin`)作为第一个参数,将需要赋值的字符串作为第二个参数,返回输入流,以便支持链式输入操作(如`cin >> str1 >> str2`)。具体实现逻辑是从输入流中读取字符,直到遇到空格或其他分隔符号,然后将读到的字符添加到字符串中。
c++重载运算符“->”
在C++中,箭头运算符“->”通常被用于访问一个对象的成员,该对象是一个指向类对象的指针。如果要对指向类对象的指针进行重载,我们可以使用箭头运算符“->”进行重载。
重载箭头运算符的语法如下:
```
class MyClass {
public:
MyClass* operator->() {
// ...
}
};
```
在这个示例中,我们重载了 MyClass 类的箭头运算符“->”。在重载函数中,我们可以返回一个指向 MyClass 类对象的指针或一个指向另一个类对象的指针,这取决于我们的需求。
下面是一个使用重载箭头运算符的示例:
```
MyClass obj;
MyClass* ptr = &obj;
ptr->someMethod(); // 调用 MyClass::someMethod() 方法
```
在这个示例中,我们定义了一个 MyClass 类的对象 obj,并且获取了指向该对象的指针 ptr。由于我们已经重载了箭头运算符“->”,因此我们可以使用箭头运算符来访问 MyClass 类对象的成员函数 someMethod()。
阅读全文