C++工作笔记-根据父类指针获取子类类型(或不同的对象)

程序运行截图如下:


解决此问题的关键是:

父类用一个虚函数返回一个值。

每个子类通过对这个值设置不同的数据。

从而判断不同的类,或不同的对象;

代码如下:

#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");
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/80856549