程序运行截图如下:
解决此问题的关键是:
父类用一个虚函数返回一个值。
每个子类通过对这个值设置不同的数据。
从而判断不同的类,或不同的对象;
代码如下:
#include <iostream>
#include <vector>
using namespace std;
#define ImpleType 0
#define ApiType 1
class Base{
public:
virtual int getClassType()const = 0;
protected:
Base(){}
};
class MyImple :public Base{
public:
int m_type;
MyImple(const int type){
m_type = type;
}
int getClassType()const{
return m_type;
}
};
class MyApi :public Base{
public:
int m_type;
MyApi(const int type){
m_type = type;
}
int getClassType()const{
return m_type;
}
};
class MyFactory{
public:
static Base* createData(int type){
Base *base = nullptr;
if (type == ImpleType){
base = new MyImple(type);
}
else if (type == ApiType){
base = new MyApi(type);
}
else{
}
return base;
}
};
void main(){
Base *myData1 = MyFactory::createData(ImpleType);
Base *myData2 = MyFactory::createData(ApiType);
Base *myData3 = MyFactory::createData(ImpleType);
Base *myData4 = MyFactory::createData(ApiType);
Base *myData5 = MyFactory::createData(ImpleType);
vector<Base*> myVec;
myVec.push_back(myData1);
myVec.push_back(myData2);
myVec.push_back(myData3);
myVec.push_back(myData4);
myVec.push_back(myData5);
for (int i = 0; i < myVec.size(); i++){
if (myVec[i]->getClassType() == ImpleType){
cout << "第" << i << "个为:MyImple类\n";
}
else
cout << "第" << i << "个为:MyApi类\n";
delete myVec[i];
}
system("pause");
}