以下是我个人写的一段小程序,仅供娱乐,呵呵!
2011-02-27 14:48
459 查看
///////////////#Baseclass.h
class Baseclass
{
public:
virtual ~Baseclass()=0;
};
class directclass1:public Baseclass
{
public:
directclass1(int strongcount=0);
//private:
int strongcount;
};
class directclass2:public Baseclass
{
public:
directclass2(int strongcount=0);
//private:
int strongcount;
};
void direct2direct1(const Baseclass&,const Baseclass&);
void direct1direct2(const Baseclass&,const Baseclass&);
////////////////////////////#216.h
#include <map>
#include <string>
#include <iostream>
using namespace std;
namespace
{
typedef void (*Hitfunction)(const Baseclass&,const Baseclass&);
typedef map<pair<string,string>,Hitfunction>Hitmap;
static Hitmap* phf;
void makestringpair(const string&class1,const string&class2);
void Registerclassmap(const string& class1,
const string& class2,
Hitfunction,
bool istrueselect=true);
void AddEntryclass(const string&class1,
const string&class2,
Hitfunction);
void Moveclass(const string&class1,
const string&class2,
Hitfunction);
Hitfunction lookup(const string&class1,const string&class2);
void Bothcollision(const Baseclass&,const Baseclass&);
void releasesource();
}
////////////#216.cpp
#include "Baseclass.h"
#include "216.h"
static int counts=0;
directclass1::directclass1(int strongcount):strongcount(strongcount){}
directclass2::directclass2(int strongcount):strongcount(strongcount){}
void direct1direct2(const Baseclass&class11,const Baseclass&class22)
{
const directclass1& class1=dynamic_cast<const directclass1&>(class11);
const directclass2& class2=dynamic_cast<const directclass2&>(class22);
if(class1.strongcount>class2.strongcount)
{
cout<<"directclass2已被坠毁!"<<endl;
}
else if(class1.strongcount<class2.strongcount)
{
cout<<"directclass1已被坠毁!"<<endl;
}
else
cout<<"directclass1与directclass2同时被坠毁!"<<endl;
}
void direct2direct1(const Baseclass&class11,const Baseclass&class22)
{
const directclass2& class1=dynamic_cast<const directclass2&>(class11);
const directclass1& class2=dynamic_cast<const directclass1&>(class22);
direct1direct2(class2,class1);
}
Baseclass::~Baseclass(){}
namespace
{
void Registerclassmap(const string& class1,
const string& class2,
Hitfunction ptr,
bool istrueselect)
{
if(istrueselect)
AddEntryclass(class1,class2,ptr);
}
}
namespace
{
pair<string,string>makestringpair(const char*class1,const char*class2)//如果将char*改为string呢?
{
return pair<string,string>(class1,class2);
}
}
namespace
{
void AddEntryclass(const string&class1,
const string&class2,
Hitfunction ptr)
{
counts++;
if(counts==1)
phf=new Hitmap;
(*phf)[pair<string,string>(class1,class2)]=ptr;
}
}
namespace
{
Hitfunction lookup(const string&class1,const string&class2)
{
Hitmap*collisionmapptr=phf;
map<pair<string,string>,Hitfunction>::iterator ite=phf->find(make_pair(class1,class2));
if(ite==collisionmapptr->end())
return 0;
else
return (*ite).second;
}
}
namespace
{
void Bothcollision(const Baseclass&class1,const Baseclass&class2)
{ double a=0;
try
{
Hitfunction ptr1;
ptr1=lookup(typeid(class1).name(),typeid(class2).name());
if(ptr1)
(ptr1)(class1,class2);
else
throw a;
}
catch(double)
{
cout<<"不明物体撞击!"<<endl;
}
}
}
namespace
{
void Moveclass(const string&class1,
const string&class2,
Hitfunction)
{
map<pair<string,string>,Hitfunction>::iterator ite=phf->find(make_pair(class1,class2));
if(ite==(*phf).end())
cout<<"未找到要删除的元素!"<<endl;
else
(*phf).erase(ite);
}
}
namespace
{
void releasesource()
{
delete phf;
}
}
void main()
{
Registerclassmap("class directclass1","class directclass2",&direct1direct2);
Registerclassmap("class directclass2","class directclass1",&direct2direct1);
directclass1 class1;
directclass2 class2;
directclass1 class3(10);
directclass2 class4(30);
Bothcollision(class1,class2);
Bothcollision(class3,class4);
Moveclass("class directclass2","class directclass1",&direct2direct1);
Bothcollision(class4,class3);
releasesource();
}
/*namespace
{
typedef (*Hitfunction)(const Replacedclass<T>&,const Replacedclass<T>&);
typedef map<pair<string,string>,Hitfunction>Hitmap;
void Registerclassmap(const string& class1,
const string& class1,
Hitfunction,
bool istrueselect=true);
void AddEntryclass(const string&class1,
const string&class2,
Hitfunction);
Hitfunction lookup(const string&class1,const string&class1);
void Bothcollision(const Replacedclass<T>&,const Replacedclass<T>&);
}*/
class Baseclass
{
public:
virtual ~Baseclass()=0;
};
class directclass1:public Baseclass
{
public:
directclass1(int strongcount=0);
//private:
int strongcount;
};
class directclass2:public Baseclass
{
public:
directclass2(int strongcount=0);
//private:
int strongcount;
};
void direct2direct1(const Baseclass&,const Baseclass&);
void direct1direct2(const Baseclass&,const Baseclass&);
////////////////////////////#216.h
#include <map>
#include <string>
#include <iostream>
using namespace std;
namespace
{
typedef void (*Hitfunction)(const Baseclass&,const Baseclass&);
typedef map<pair<string,string>,Hitfunction>Hitmap;
static Hitmap* phf;
void makestringpair(const string&class1,const string&class2);
void Registerclassmap(const string& class1,
const string& class2,
Hitfunction,
bool istrueselect=true);
void AddEntryclass(const string&class1,
const string&class2,
Hitfunction);
void Moveclass(const string&class1,
const string&class2,
Hitfunction);
Hitfunction lookup(const string&class1,const string&class2);
void Bothcollision(const Baseclass&,const Baseclass&);
void releasesource();
}
////////////#216.cpp
#include "Baseclass.h"
#include "216.h"
static int counts=0;
directclass1::directclass1(int strongcount):strongcount(strongcount){}
directclass2::directclass2(int strongcount):strongcount(strongcount){}
void direct1direct2(const Baseclass&class11,const Baseclass&class22)
{
const directclass1& class1=dynamic_cast<const directclass1&>(class11);
const directclass2& class2=dynamic_cast<const directclass2&>(class22);
if(class1.strongcount>class2.strongcount)
{
cout<<"directclass2已被坠毁!"<<endl;
}
else if(class1.strongcount<class2.strongcount)
{
cout<<"directclass1已被坠毁!"<<endl;
}
else
cout<<"directclass1与directclass2同时被坠毁!"<<endl;
}
void direct2direct1(const Baseclass&class11,const Baseclass&class22)
{
const directclass2& class1=dynamic_cast<const directclass2&>(class11);
const directclass1& class2=dynamic_cast<const directclass1&>(class22);
direct1direct2(class2,class1);
}
Baseclass::~Baseclass(){}
namespace
{
void Registerclassmap(const string& class1,
const string& class2,
Hitfunction ptr,
bool istrueselect)
{
if(istrueselect)
AddEntryclass(class1,class2,ptr);
}
}
namespace
{
pair<string,string>makestringpair(const char*class1,const char*class2)//如果将char*改为string呢?
{
return pair<string,string>(class1,class2);
}
}
namespace
{
void AddEntryclass(const string&class1,
const string&class2,
Hitfunction ptr)
{
counts++;
if(counts==1)
phf=new Hitmap;
(*phf)[pair<string,string>(class1,class2)]=ptr;
}
}
namespace
{
Hitfunction lookup(const string&class1,const string&class2)
{
Hitmap*collisionmapptr=phf;
map<pair<string,string>,Hitfunction>::iterator ite=phf->find(make_pair(class1,class2));
if(ite==collisionmapptr->end())
return 0;
else
return (*ite).second;
}
}
namespace
{
void Bothcollision(const Baseclass&class1,const Baseclass&class2)
{ double a=0;
try
{
Hitfunction ptr1;
ptr1=lookup(typeid(class1).name(),typeid(class2).name());
if(ptr1)
(ptr1)(class1,class2);
else
throw a;
}
catch(double)
{
cout<<"不明物体撞击!"<<endl;
}
}
}
namespace
{
void Moveclass(const string&class1,
const string&class2,
Hitfunction)
{
map<pair<string,string>,Hitfunction>::iterator ite=phf->find(make_pair(class1,class2));
if(ite==(*phf).end())
cout<<"未找到要删除的元素!"<<endl;
else
(*phf).erase(ite);
}
}
namespace
{
void releasesource()
{
delete phf;
}
}
void main()
{
Registerclassmap("class directclass1","class directclass2",&direct1direct2);
Registerclassmap("class directclass2","class directclass1",&direct2direct1);
directclass1 class1;
directclass2 class2;
directclass1 class3(10);
directclass2 class4(30);
Bothcollision(class1,class2);
Bothcollision(class3,class4);
Moveclass("class directclass2","class directclass1",&direct2direct1);
Bothcollision(class4,class3);
releasesource();
}
/*namespace
{
typedef (*Hitfunction)(const Replacedclass<T>&,const Replacedclass<T>&);
typedef map<pair<string,string>,Hitfunction>Hitmap;
void Registerclassmap(const string& class1,
const string& class1,
Hitfunction,
bool istrueselect=true);
void AddEntryclass(const string&class1,
const string&class2,
Hitfunction);
Hitfunction lookup(const string&class1,const string&class1);
void Bothcollision(const Replacedclass<T>&,const Replacedclass<T>&);
}*/
相关文章推荐
- 第四次上机实验 (免责)这个程序仅供娱乐,执行请用虚拟机,一切后果与本人无关
- 请阅读以下一段程序,并给出答案
- 请阅读以下一段程序,并给出答案
- iOS 中 当程序进入后台 但是程序员希望在程序进入后台的时候还可以运行一段代码时候可以做以下的操作
- 仅供娱乐: 用中文命名,让汉字走向程序开发中!
- 写一段程序,查看本地JVM参数设置
- 判断一段程序是由C 编译程序还是由C++编译程序编译
- 2007年7月24日 19时4分教你怎么混财大--财大四年回忆录3(以下内容仅供后人参考,前人勿入。)
- 最近sql注入数据库被更改泛滥,以下提供一个.net程序防止sql注入的方法
- 个人写的一个拼图智能程序
- 汇编语言: 试编写一段程序,从键盘接收一个-32768-32767 间的十进制有符号数,并在终端上 显示与它等值的二进制数。
- 安装SQL Server 2000时出现以下错误提示:“以前的某个程序安装已在安装计算机创建挂起的文件操作,运行安装程序之前必须重新启动计算机” 说明:如果重启计算机无法解决问题,可能有以下两个原因
- 这一段程序会输出什么呢?
- 一段取得翻唱排行榜上歌曲名称,艺人,地址的脚本程序
- 对于任意正整数都可以找出至少一串连续奇数,它们的和等于该整数的立方。以下程序验证[2,20]之间的数满足这一性质。
- 分享一段JS代码,个人感觉很使用:网页浏览历史记录
- 刚装的win7系统,打开应用程序的时候老是出现【用户账户控制】上面写【您想允许来自未知发布者的以下程序对此计算机进行更改吗?】
- 微信小程序,个人开发者创业新平台
- 从ConnectionStringSettings获得数据库连接。使程序与具体数据库类型无关(SQL必须一样,呵呵)
- 一段c++程序