C++语言之虚函数、多态、抽象类

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、最好使用链表来实现(为简化,也可先用数组来实现,但录入的人员个数就有限制了)
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值