老师又布置了一次作业,所以又写了一次C嘎嘎,感觉又是语法糖,可以分享一下
这次的语法糖是多态,大概说来就是使用父类指针调用子类函数,而且父类的同名函数必须是虚函数,必要时可写为纯虚函数
这次没写用户界面,别问,问就是懒得写,用户界面可以参考用C++实现学生教师类的菱形继承、用C++实现复数的四则运算的用户界面
这里特别要说一点,这三个代码的toString()
函数中用到了一个std::to_string()
函数,它的作用是将整型转化为字符串型,所需要的文件头是#include<sstream>
,编译器是Visual Studio;如果要使用Dev-cpp编译,将整型转化为字符串型的方法需要使用itoa()
函数,它的参数是要转的整型, 字符数组, 10
,这里的10表示十进制,文件头是#include<stdlib.h>
拥有五个类,分别是Person
、Student
、Undergraduate
、Postgraduate
、Teacher
,Person类基类,其他类继承基类,基类包含纯虚函数,Student类包含虚函数,每个类拥有一个toString()
函数来打印信息,以此来实现多态
由于懒得写交互界面,我直接在main
函数里写了对象的创建(用父类指针)
基类
#include<iostream> #include<sstream> using namespace std; //人员类 class Person { public: Person() {} Person(string n) : m_name(n) {} string getName() { return m_name; } virtual string toString() = 0; //纯虚函数 private: string m_name; };
Student
//学生类 class Student : public Person { public: Student() {} Student(int s, string n) : m_score(s), Person(n) {} string getName() { return Person::getName(); } int getScore() { return m_score; } virtual string toString() { return Person::getName() + "'s score is " + std::to_string(m_score) + "\n"; } private: int m_score; };
本科生和研究生类
//本科生 class Undergraduate : public Student { public: Undergraduate() {} Undergraduate(int s, string n) : Student(s, n) {} string toString() { return Student::getName() + "'s score is " + std::to_string(Student::getScore()) + "\n"; } }; //研究生 class Postgraduate : public Student { public: Postgraduate() {} Postgraduate(int s, string n) : Student(s, n) {} string toString() { return Student::getName() + "'s score is " + std::to_string(Student::getScore()) + "\n"; } };
教师类继承人员类
//教师 class Teacher : public Person { public: Teacher() {} Teacher(int s, string n) : m_salary(s), Person(n) {} string toString() { return Person::getName() + "'s salary is " + std::to_string(m_salary) + "\n"; } private: int m_salary; };
main函数
int main() { //父类指针6 Person *person[4]; person[0] = new Student(98, "aa"); person[1] = new Undergraduate(89, "bb"); person[2] = new Postgraduate(77, "cc"); person[3] = new Teacher(5000, "dd"); for (int i = 0; i < 4; i++) { cout << person[i]->toString(); } return 0; }