C/C++教程

用C++实现多态

本文主要是介绍用C++实现多态,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 前言
  • 功能介绍
  • 结果展示
  • 代码区

前言

老师又布置了一次作业,所以又写了一次C嘎嘎,感觉又是语法糖,可以分享一下
这次的语法糖是多态,大概说来就是使用父类指针调用子类函数,而且父类的同名函数必须是虚函数,必要时可写为纯虚函数

这次没写用户界面,别问,问就是懒得写,用户界面可以参考用C++实现学生教师类的菱形继承、用C++实现复数的四则运算的用户界面

这里特别要说一点,这三个代码的toString()函数中用到了一个std::to_string()函数,它的作用是将整型转化为字符串型,所需要的文件头是#include<sstream>,编译器是Visual Studio;如果要使用Dev-cpp编译,将整型转化为字符串型的方法需要使用itoa()函数,它的参数是要转的整型, 字符数组, 10,这里的10表示十进制,文件头是#include<stdlib.h>

功能介绍

拥有五个类,分别是PersonStudentUndergraduatePostgraduateTeacher,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;
}
这篇关于用C++实现多态的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!