重载>>
时间: 2023-08-07 22:10:59 浏览: 85
重载>>是C++中的输入流运算符重载,用于实现自定义类型对象的输入操作。其语法格式为:
```
istream& operator>>(istream& is, 自定义类型& obj) {
// 输入操作的具体实现
return is;
}
```
其中,`is`表示输入流对象,`obj`表示要输入的自定义类型对象。在函数体内,我们可以根据输入流的格式和自定义类型的成员变量,实现对象的输入操作。最后,返回输入流对象的引用。
举个例子,如果我们有一个自定义类型`Person`,其中包含`name`和`age`两个成员变量,我们可以通过重载>>来实现对`Person`对象的输入。
```
class Person {
public:
string name;
int age;
};
istream& operator>>(istream& is, Person& p) {
is >> p.name >> p.age;
return is;
}
```
这样,我们就可以使用输入流运算符>>来输入`Person`对象了。
```
Person p;
cin >> p; // 等价于 operator>>(cin, p);
```
相关问题
重载>>运算符的返回值
重载运算符`>>`的返回值通常是用于链式输入操作的流对象本身,即返回一个引用。这样可以实现多个输入操作连续进行,类似于`cin >> a >> b;`的形式。
在C++中,重载输入运算符`>>`时,应该按照以下格式进行定义:
```cpp
istream& operator>>(istream& is, YourClass& obj)
{
// 输入操作的实现
return is;
}
```
其中,`istream`是输入流类型,`YourClass`是要进行输入操作的类名,`obj`是要输入数据的对象。
在函数内部实现输入操作后,将输入流对象`is`返回,以便实现链式输入操作。
这种返回类型的设计可以确保操作符重载后的输入表达式能够按照预期进行,例如 `cin >> a >> b;` 可以连续地对 `a` 和 `b` 进行输入操作。
派生类中重载>>
派生类中可以重载>>运算符,来实现从输入流中读取派生类对象的数据。
例如,如果有一个基类Animal和一个派生类Cat,可以这样重载:
```c++
class Animal {
public:
string name;
virtual void speak() = 0;
friend istream& operator>>(istream& in, Animal& animal);
};
class Cat : public Animal {
public:
void speak() override {
cout << "Meow!" << endl;
}
friend istream& operator>>(istream& in, Cat& cat);
};
istream& operator>>(istream& in, Animal& animal) {
in >> animal.name;
return in;
}
istream& operator>>(istream& in, Cat& cat) {
in >> cat.name;
return in;
}
```
然后可以这样使用:
```c++
int main() {
Animal* animal = new Cat();
cin >> *animal;
animal->speak();
delete animal;
return 0;
}
```
在输入时,可以输入派生类对象的所有成员变量,因为基类的>>运算符可以读取派生类对象的共有成员变量。
阅读全文