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

  • 相关阅读:
    【C++】【实用篇】H.Y_C的刷题日记(一本通1032、2032、2048)
    【视频处理】通过调用图像来重建新影片及计算颜色通道的平均灰度值,并检测帧与前一帧之间的差异(Matlab代码实现)
    SUSE 12双网卡绑定
    计算机毕业设计(55)php小程序毕设作品之企业公司小程序系统
    3-6数据链路层-广域网
    通达信添加自定义公式(分时T+0)为例子讲解
    一起来做个CH347的项目(应用于FPGA、CPLD、MCU)
    基于SSM框架流浪猫救援网站的设计与实现毕业设计源码201502
    7.网络原理之TCP_IP(下)
    DJYOS开源往事三:DJYOS源码发布网络实证
  • 原文地址:https://blog.csdn.net/zzjlhlcd/article/details/127711996