• C++多态



    //继承的方式:public private protected
    /*
    1.私有成员不能被继承
    2.公有继承保持不变
    3.私有继承变为私有
    4.保护继承变为保护

    创建一个子类对象时,先调用父类的构造函数再调子类的构造函数
    销毁一个对象时,先调用子类的析构函数再调父类的析构

    子类对象和父类对象的转换:子类可转换成父类,但是父类不能转换成子类

    多重继承:一个类有多个基类
    多重继承中的二意性(虚继承)

    //动态绑定和静态绑定是相对于函数而言
    静态绑定:在编译阶段确定调用函数的绑定称为静态绑定
    //在对象中,普通成员函数是不占内存的,而成员变量是占内存的

    动态绑定:在运行时确定调用函数的绑定称为动态绑定
    虚函数:函数声明时,在前面加virtual
    虚函数是占内存的,

    //我们发现同一个类型的指针(或者引用),调用相同函数表现不一样:多态
    //多态:相同的自定义的数据类型的指针(或引用)有不同的形态

    //多态应用:用父类指针变量保存子类对象的地址,
    再用父类指针变量调用虚函数

    //覆盖(重写)
    */
    /*
    class cParent
    {
    public:
    cParent(){
    cout << "cParent::cParent()" << endl;
    }
    cParent(int a,int b){
    cout << "cParent::cParent(int a)" << endl;
    }
    ~cParent(){}
    };

    class cChild :public cParent
    {
    public:
    cChild(){}
    cChild(int a):cParent(a,10){}
    ~cChild(){}
    };*/

    //工作人的类
    class cWorker
    {
    public:
    cWorker(){}
    ~cWorker(){}
    virtual void Work(){
    cout << "工作" << endl;
    }
    void TestFun(){
    cout << "cWorker::TestFun()" << endl;
    }


    int m_age;
    };


    //程序员
    class cProgrammer:public cWorker
    {
    public:
    cProgrammer(){}
    ~cProgrammer(){}
    void Work(){
    cout << "写代码" << endl;
    }

    void TestFun(){
    cout << "cProgrammer::TestFun()" << endl;
    }
    };
    //人事专员
    class cPersonal :public cWorker
    {
    public:
    cPersonal(){
    }
    ~cPersonal(){}
    void Work()
    {
    //this->a = 10;
    cout << "招聘" << endl;
    }
    void TestFun(){
    cout << "cPersonal::TestFun()" << endl;
    }
    int a;
    };


    //作业 :
    /*
    作业:实现动物类 鸟类 狗类 蛇类,每个类里实现一个行走方法Walk(),

    如果是鸟类输出:我飞着走,狗类:我四只脚走 蛇类:我是用溜的。
    分别创建三种动物的对象保存在同一个数组中,再遍历数组让他们走起来
    */

    int _tmain(int argc, _TCHAR* argv[])
    {
    cPersonal* per = new cPersonal;
    per->m_age =100;
    cWorker* pWorker = per;
    cout << "pWorker->m_age: "<< pWorker->m_age << endl;
    cProgrammer* programmer = new cProgrammer;
    // A:输出错误的值 B:输出100
    per->Work();
    pWorker->Work();
    cWorker* pWorker2 = programmer;
    pWorker2->Work();

    pWorker2->TestFun();
    programmer->TestFun();

    /*int a;
    cPersonal* pWorker = NULL;
    pWorker->Work();*/
    //A.出错 B.正常运行
    return 0;
    }

  • 相关阅读:
    Instruments Tutorial for iOS: How To Debug Memory Leaks
    How to Use Instruments in Xcode
    Demystifying iOS Application Crash Logs
    “iOS 推送通知”详解:从创建到设置到运行
    推送通知iOS客户端编写实现及推送服务器端编写
    cocos2d-iphone 与 UI组件
    ScrollLayer
    TexturePacker
    mybatis的配置
    spring+redis
  • 原文地址:https://www.cnblogs.com/huninglei/p/5493652.html
Copyright © 2020-2023  润新知