多态打印
C++ Polymorphic printing
假设我们有一个Person类,它有两个字段:name和number。Class Student继承Person并添加另一个名为averageGrade的字段。
我已经为Person和Student定义了运算符"<<",并且希望能够拥有Person数组,该数组也将包含Student对象。当我想从数组中打印一个恰好是Student的元素时,我想要调用特定于Student的操作符"<<"的定义,而不是针对Person的定义。
一个人该怎么做呢?
person.h:
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Person
{
private:
string name;
int number;
public:
Person();
Person(string,int);
friend ostream& operator<<(ostream& os, const Person& person);
};
person.cpp:
#include "person.h"
Person::Person() : Person("defaultName", 0)
{
}
Person::Person(string name, int number)
{
this->name = name;
this->number = number;
}
ostream& operator<<(ostream& os, const Person& person)
{
os << "Name: " << person.name << endl;
os << "Number: " << person.number;
return os;
}
student.h:
#pragma once
#include "person.h"
class Student : public Person
{
private:
double averageGrade;
public:
Student();
Student(string, int, double);
friend ostream& operator<<(ostream& os, const Student& student);
};
student.cpp:
#include "student.h"
Student::Student() : Person()
{
this->averageGrade = 5.0;
}
Student::Student(string name, int number, double avgGrade) : Person(name, number)
{
this->averageGrade = avgGrade;
}
ostream& operator<<(ostream& os, const Student& student)
{
os << (Person) student << endl;
os << "Average grade: " << student.averageGrade;
return os;
}
main.cpp:
#include "student.h"
int main()
{
Person people[10];
people[0] = Person("Tom", 1);
people[1] = Student("Greg", 6, 5.74);
cout << people[0] << endl;
cout << people[1] << endl; // prints only the name and number, without the grade
return 0;
}
方法看起来很简单。
在每个类中定义一个public或protected虚函数,例如
virtual std::ostream & out( std::ostream & );
,然后写出像
这样的输出操作符friend std::ostream & operator <<( std::ostream &os, const Person &person )
{
return person.out( os );
}
和
friend std::ostream & operator <<( std::ostream &os, const Student &student )
{
return student.out( os );
}
或只有第一个操作符
请注意,不能声明一个同时存储Person和Students类型对象的数组。
相关文章:
- 多态性和功能结合
- 具有默认模板参数的多态类的模板推导失败
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 多态二进制函数
- 访问存储在向量C++中的结构的多态成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 将 std::allocate_shared 与多态资源分配器一起使用
- 通过switch和static_cast访问多态对象的运行时类型
- C++boost序列化多态性问题
- 多态杆件变量 - 类设计
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- Doees the 'this' 指针参与虚函数的多态行为
- C++ 在堆栈中包含多态属性的类对象存储
- 基类和派生类的多态赋值运算符
- 使用多态性打印方法.c++
- 继承和多态打印功能
- 在单个类中C++打印和反向打印的多态函数
- 多态打印
- 如何:在打印函数中实现多态性