1 虚函数
代码:
int main()
{
CStudent_college stu1(1001,"zhangsan","计算机系","软件专业");
CStudent_pupil stu2(901,"xiaoming","中队长");
stu1.print_student();
stu2.print_student();
//CStudent_college *pstu1=new CStudent_college(1001,"zhangsan","计算机系","软件专业");
CStudent *pstu1=new CStudent_college(1001,"zhangsan","计算机系","软件专业");
CStudent *pstu2=new CStudent_pupil(901,"xiaoming","中队长");
pstu1->print_student(); //virtual
pstu2->print_student();
return 0;
}
语法:
1 父类------有了virtual,则 子类 才可能 使用到 多态
2 子类中的 virtual可以省--------但最好别省
3 必须使用new ,给 父类地址变量 赋值,才能用到 多态。
2 抽象类
举例:
有1类--------人类
按道理,不应该 能建立 1个 人类的 对象
但这种类,应该很适合 作为 父类
从语法上如何解决?
利用了 虚函数---------在h文件中,在某个成员函数的前面 加 virtual 最后加=0
该类 编程了 抽象类
如果有1个子类,要继承 抽象类(父类):
默认情况下,子类 也是 抽象类 -------- 如何,子类中实现了 抽象类中的 所有 纯虚函数,子类才不会是 抽象类
代码:抽象类---------和它的派生类
//Person.h-----抽象类
class CPerson
{
public:
char *name;
int age;
CPerson();
CPerson(char *name,int age);
virtual ~CPerson();
virtual void print_person()=0;
};
//Person.cpp
// Person.cpp: implementation of the CPerson class.
//
//
#include <iostream>
#include "Person.h"
using namespace std;
//
// Construction/Destruction
//
CPerson::CPerson()
{
}
CPerson::~CPerson()
{
}
CPerson::CPerson(char *name,int age)
{
this->name=new char[strlen(name)+1];
strcpy(this->name,name);
this->age=age;
}
/*
void CPerson::print_person()
{
cout<<"name is "<<name<<" age is "<<age<<endl;
return;
}*/
//Worker.h----抽象类的 派生类
#include "Person.h"
class CWorker : public CPerson
{
public:
CWorker();
virtual ~CWorker();
void print_person();
};
//Worker.cpp
// Worker.cpp: implementation of the CWorker class.
//
//
#include "Worker.h"
//
// Construction/Destruction
//
CWorker::CWorker()
{
}
CWorker::~CWorker()
{
}
void CWorker::print_person()
{
;
}
//main.cpp
#include "Student_college.h"
#include "Student_pupil.h"
#include "Student.h"
#include "Worker.h"
int main()
{
/*
CStudent_college stu1(1001,"zhangsan","计算机系","软件专业");
CStudent_pupil stu2(901,"xiaoming","中队长");
//stu1.print_student();
//stu2.print_student();
//CStudent_college *pstu1=new CStudent_college(1001,"zhangsan","计算机系","软件专业");
CStudent *pstu1=new CStudent_college(1001,"zhangsan","计算机系","软件专业");
CStudent *pstu2=new CStudent_pupil(901,"xiaoming","中队长");
pstu1->print_student(); //如果不使用virtual函数,则系统默认 静态绑定;加了虚函数,就是动态绑定---多态
pstu2->print_student();*/
//CPerson per1("zhangsan",21);
//per1.print_person();
CWorker worker1;
return 0;
}
课后作业:
1、仔细地复习 课堂笔记、ppt、视频,整理自己的课堂笔记(可以在老师的课堂笔记基础上 进行整理和完善)
2、将复习当中 发现的问题,一一整理出来,请老师来帮忙分析解决(也可先与 其他同学讨论分析)
3、综合题
名称:老师和学生的信息管理系统
功能和要求:
1、有CPerson(抽象类)、CTeacher、CStudent三个类,使用继承关系。根据界面的菜单(如打印所有老师信息、打印所有学生信息、打印所有人员信息、
增加老师信息、增加学生信息)等。
2、最好使用链表来实现(为简化,也可先用数组来实现,但录入的人员个数就有限制了)