父類調用子類方法

父類調用子類方法

子類可能會在父類的基礎上增加一些方法。
簡單工廠模式中,會創建出子類然後將子類的指針賦給父類。

// Factory.cpp : 定義控制檯應用程序的入口點。
//
 
#include "stdafx.h"
#include<iostream>
 
using namespace std;
 
class Product
{
public:
    virtual void show() = 0;  
};
 
class Product_A : public Product
{
public:
    void show()
    {
        cout << "Product_A" << endl;
    }
};
 
class Product_B : public Product
{
public:
    void show()
    {
        cout << "Product_B" << endl;
    }
};
 
class Factory
{
public:
    Product* Create(int i)
    {
        switch (i)
        {
        case 1:
            return new Product_A;
            break;
        case 2:
            return new Product_B;
            break;
        default:
            break;
        }
    }
};
 
int main()
{
    Factory *factory = new Factory();
    factory->Create(1)->show();
    factory->Create(2)->show();
    system("pause");
    return 0;
}

如果子類中增加了一些父類沒有的接口,那麼,基類指針就不能直接調用子類特有的接口。
這裏可以將父類指針轉化爲子類指針。

using namespace std;

class Base
{
public:
    void  virtual   Func()
    {
        cout << "Base Func\n";
    }
};
class Child :public Base
{
public:
    void Func()
    {
        cout << "Child Func\n";
    }
    void NewFunc()
    {
        cout << "Child Newfunc\n";
    }
    int number = 10;

};
//測試用例
int main()
{
    Base* b = new Child;//先將子類new出來,給父類
    b->Func();//輸出Child Func
    Child* c_1 = dynamic_cast<Child*>(b);
    cout << c_1->number << endl;
    c_1->number = 1;
    Child* c_2 = dynamic_cast<Child*>(b);
    cout << c_2->number << endl;
    return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章