重载的>>不能访问基类的对象
时间: 2023-08-13 13:07:31 浏览: 88
探讨C++中不能声明为虚函数的有哪些函数
在重载>>运算符时,派生类的重载函数只能访问派生类的成员变量。如果需要访问基类的成员变量,可以使用基类的友元函数来实现。
例如,在派生类Cat中重载>>运算符,需要访问基类Animal的成员变量,可以这样实现:
```c++
class Animal {
public:
string name;
virtual void speak() = 0;
friend istream& operator>>(istream& in, Animal& animal);
};
class Cat : public Animal {
public:
int age;
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 >> static_cast<Animal&>(cat); // 调用基类的友元函数
in >> cat.age;
return in;
}
```
在Cat中的重载函数中,首先调用了Animal的友元函数,来读取Animal的成员变量name,然后再读取Cat的成员变量age。在调用Animal的友元函数时,需要使用static_cast将cat转换为Animal的引用。
这样,就可以在派生类中重载>>运算符,并访问基类的成员变量了。
阅读全文