父類調用子類方法
子類可能會在父類的基礎上增加一些方法。
簡單工廠模式中,會創建出子類然後將子類的指針賦給父類。
// 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;
}