關於c++多態

下面這段代碼:

#include <iostream>  
#include <string.h>  

class parent
{
public:
    virtual void who()
    {
        std::cout << "I am class Parent" << std::endl;
    }
};

class son : public parent
{
public:
    virtual void who() override /*final*/
    {
        std::cout << "I am class Son" << std::endl;
    }
};

class daughter : public parent
{
public:
    virtual void who() override /*final*/
    {
        std::cout << "I am class Daughter" << std::endl;
    }
};

int main()
{
    son *pmyson = new son;
    daughter *pmydaughter = new daughter;
    memcpy(pmydaughter, pmyson, sizeof(*pmyson));
    std::cout << "---1----------" << std::endl;
    pmyson->who();
    pmydaughter->who();
    std::cout << "---2----------" << std::endl;
    (*pmyson).who();
    (*pmydaughter).who();
    //  
    parent *pmyson1 = new son;
    parent *pmydaughter1 = new daughter;
    memcpy(pmydaughter1, pmyson1, sizeof(*pmyson1));
    std::cout << "---3----------" << std::endl;
    pmyson1->who();
    pmydaughter1->who();
    std::cout << "---4----------" << std::endl;
    (*pmyson1).who();
    (*pmydaughter1).who();
    //  
    son myson;
    daughter mydaughter;
    memcpy(&mydaughter, &myson, sizeof(myson));
    std::cout << "---5----------" << std::endl;
    myson.who();
    mydaughter.who();
    std::cout << "---6----------" << std::endl;
    ((parent*)(&myson))->who();
    ((parent*)(&mydaughter))->who();

    return 0;
}

輸出應該是什麼呢?

學過C++,應該你會有自己的答案,但是vs運行一下,可能結果並不是你所想象的。

//輸出:
---1----------
I am class Son
I am class Son
---2----------
I am class Son
I am class Son
---3----------
I am class Son
I am class Son
---4----------
I am class Son
I am class Son
---5----------
I am class Son
I am class Daughter
---6----------
I am class Son
I am class Son
那如果把註釋掉的“final”重新加上呢?
//輸出:
---1----------
I am class Son
I am class Daughter
---2----------
I am class Son
I am class Daughter
---3----------
I am class Son
I am class Son
---4----------
I am class Son
I am class Son
---5----------
I am class Son
I am class Daughter
---6----------
I am class Son
I am class Son

作爲一個需要不斷學習溫故的好學之士,我也搞不懂了。

另外,vs編譯不過可以使用http://cpp.sh/試試哦。

發佈了33 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章