zoukankan      html  css  js  c++  java
  • 对象切割 ObjectSlicing

    /*
     Test ONE:
    CDocument::func()
    CMyDoc::Serialize()
    Test TWO:
    CDocument::func()
    CMyDoc::Serialize()
    Test Three:
    CDocument::func()
    CMyDoc::Serialize()
    Test Four:
    CDocument::func()
    CDocument::Serialize()   
     
    */
    #include <iostream>
    using namespace std;

    class CObject
    {
    public:
        virtual void Serialize(){ cout << "CObject::Serialize() \n"; }
    };

    class CDocument : public CObject
    {
    public:
        int m_data1;
        void func(){
            cout << "CDocument::func()" << endl;
            Serialize();
        }
        void Serialize(){ cout << "CDocument::Serialize() \n"; }
    };

    class CMyDoc : public CDocument
    {
    public:
        int m_data2;
        virtual void Serialize(){ cout << "CMyDoc::Serialize()" << endl; }
    };

    void main()
    {
        CMyDoc mydoc;//感觉这仅仅是一个声明,为什么居然能呼叫函数
        CMyDoc* pDoc = new CMyDoc; //这里()可有可无

        cout << "Test ONE:" << endl;
        mydoc.func();

        cout << "Test TWO:" << endl;
        ((CDocument*) &mydoc)->func();

        cout <<"Test Three:" << endl;
        pDoc->func();

        cout << "Test Four:" << endl;
        ((CDocument) mydoc).func();

        system("pause");
    }
  • 相关阅读:
    内存溢出异常
    Java堆中的对象
    运行时数据区域
    字符串常量池
    自己编译JDK
    @PathVariable注解详解
    spring容器监听器
    redis和spring整合
    Redis安装、启动、关闭
    HDU3974 Assign the task
  • 原文地址:https://www.cnblogs.com/flaaash/p/1895118.html
Copyright © 2011-2022 走看看