#include<iostream>
using namespace std;
class Object
{
public:
Object() {}
virtual ~Object() {}
};
class GirlFriend;
class BoyFriend : public Object
{
public:
BoyFriend() : girlFriend(NULL) {}
virtual ~BoyFriend() {}
void hookUpWithGirlFriend(GirlFriend *girlFriend)
{
//this->girlFriend = girlFriend;
cout << "aha, I have a girlFriend!" << endl;
}
protected:
GirlFriend *girlFriend;
};
class GirlFriend : public Object
{
public:
GirlFriend() : boyFriend(NULL) {}
virtual ~GirlFriend() {}
void hookUpWithBoyFriend(BoyFriend *boyFriend)
{
//this->boyFriend = boyFriend;
cout << "aha, I have a boyFriend!" << endl;
}
protected:
BoyFriend *boyFriend;
};
class SingleDog : public BoyFriend, public GirlFriend
{
public:
enum Gender{Boy, Girl};
SingleDog(Gender gender): m_gender(gender)
{
}
friend class MatchMaker;
void hooKupWithFriend(Object *object)
{
GirlFriend *girlFriend = dynamic_cast<GirlFriend*>(object);
if(girlFriend)
boyFriend->hookUpWithGirlFriend(girlFriend);
BoyFriend *boyFriend = dynamic_cast<BoyFriend*>(object);
if(boyFriend)
girlFriend->hookUpWithBoyFriend(boyFriend);
}
public:
Gender m_gender;
};
class MatchMaker : public Object
{
public:
MatchMaker()
{
}
void makeCouple(SingleDog &singleDog, Object *object)
{
singleDog.hooKupWithFriend(object);
}
};
int main(int argc, char *argv[])
{
SingleDog s(SingleDog::Boy);
MatchMaker m;
Object *object = NULL;
if( SingleDog::Boy == s.m_gender )
{
object = new GirlFriend;
}
else
{
object = new BoyFriend;
}
m.makeCouple(s, object);
return 0;
}
C++乱编系列之情人节单身狗
最新推荐文章于 2024-04-15 14:58:51 发布