关于返回父类指针的函数却返回了子类指针

ZJE_ANDY 2017-03-06 09:13:12
class Factory    
{
public:
SingleCore* CreateSingleCore(enum CTYPE ctype)
{
if(ctype == COREA) //工厂内部判断
return new SingleCoreA(); //生产核A
else if(ctype == COREB)
return new SingleCoreB(); //生产核B
else
return NULL;
}
};

如代码所示:
原本要返回父类指针 SingleCore*的函数却返回了 SingleCoreA 或 SingleCoreB。
这也可以吗?为什么可以?明明类型不一样。不会有警告或者错误吗?
...全文
206 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
EIT王子 2017-03-06
  • 打赏
  • 举报
回复
这是父类型指向了子对象。这就是C++的多态啊,这是可以的
 
class SingleCore
{
public :
	void printnum()
	{
		cout << "base";
	}
};
class SingleCoreA:public SingleCore
{
	
};
class SingleCoreB :public SingleCore
{

};
enum CTYPE
{
	COREA,
	COREB
};
class Factory
{
public:
	SingleCore* CreateSingleCore(enum CTYPE ctype)
	{
		if (ctype == COREA)//工厂内部判断    
			return new SingleCoreA();//生产核A    
		else if(ctype == COREB)
			return new SingleCoreB();//生产核B    
		else 
			return NULL;
	}
};

void main()
{
	Factory* fac = new Factory();
	SingleCore *f = fac->CreateSingleCore(COREA);
	f->printnum();}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧