virtual constructor

#include "stdafx.h"
# include<iostream>
#include<ostream>
#include<istream>
class Monster
{
public:
	virtual void show() = 0;
};

class SillyMonster : public Monster
{
public:
	virtual void show()
	{
		std::cout<<"i'm silly monster\n";
	}
};

class BadMonster : public Monster
{
public:
	virtual void show()
	{
		std::cout<<"i'm bad monster\n";
	}
};

class MonsterCreator
{
public:
virtual Monster *create() = 0;
};

class SillyMonsterCreator : public MonsterCreator
{
public:
virtual SillyMonster *create() { return new SillyMonster; }
};

class BadMonsterCreator : public MonsterCreator
{
public:
virtual BadMonster *create() { return new BadMonster; }
};


Monster* f(MonsterCreator &creator)
{  
  Monster *m = creator.create();
  return m;
}


int _tmain(int argc, _TCHAR* argv[])
{
  SillyMonsterCreator smc;
  BadMonsterCreator bmc;

  // let's create a silly monster
  Monster* Monster1= f(smc);
  Monster1->show();
  // let's create a bad monster
  Monster* Monster2= f(bmc);
  Monster2->show();

  int x(0);
  std::cin>>x;
	return 0;
}

在C++中不存在virtual constructor, 这里所说的virtual constructor指的是作用和virtual constructor类似的函数,根据不同的输入构造不同的对象。

在以上代码中,不同的怪兽派生于怪兽基类Monster,不同的怪兽生成器派生于怪兽生成基类MonsterCreator。

在怪兽生成器中利用虚函数,让不同的生成器生成不同的怪兽。

函数f就实现了virtual constructor。

参考了http://blog.sina.com.cn/s/blog_77402b360100xapy.html

以及 《More effective C++》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值