在派生类的友元函数ostream中调用另一个类的变量
时间: 2023-06-10 13:08:09 浏览: 94
07-08C 上机考试试卷A(电类).doc
可以通过在派生类中定义一个函数来实现。该函数可以访问基类和其他类的变量,并将它们输出到流中。
例如,假设有一个基类Person和一个派生类Student,另外还有一个类School。我们想要在Student类中定义一个友元函数,将Student对象的信息和School对象的信息输出到流中。
代码示例:
```c++
#include <iostream>
using namespace std;
class School {
private:
string schoolName;
public:
School(string name): schoolName(name) {}
friend ostream& operator<<(ostream& os, const School& sch) {
os << "School name: " << sch.schoolName << endl;
return os;
}
};
class Person {
protected:
string name;
int age;
public:
Person(string n, int a): name(n), age(a) {}
};
class Student : public Person {
private:
int grade;
public:
Student(string n, int a, int g): Person(n, a), grade(g) {}
friend ostream& operator<<(ostream& os, const Student& stu);
};
ostream& operator<<(ostream& os, const Student& stu) {
os << "Name: " << stu.name << endl;
os << "Age: " << stu.age << endl;
os << "Grade: " << stu.grade << endl;
os << School("ABC"); // School对象作为参数传递给运算符函数
return os;
}
int main() {
Student s("Tom", 18, 90);
cout << s; // 输出Student对象的信息和School对象的信息
return 0;
}
```
在派生类Student中定义了一个友元函数operator<<,该函数将Student对象的信息和School对象的信息输出到流中。在函数体中,我们可以使用基类Person和其他类School的成员变量,并将它们输出到流中。注意,School对象作为参数传递给运算符函数,因为该函数不是School的成员函数,不能直接访问School对象的成员变量。在main函数中,我们创建了一个Student对象s,并将其输出到流中。运行程序,输出如下:
```
Name: Tom
Age: 18
Grade: 90
School name: ABC
```
阅读全文