假如要实现,一个类型:表示狮身人面的动物
基于类的实现是这样:
复制内容到剪贴板
代码:
class 抽象人_C{
抽象人_C(头,身子):头(头),身子(身子){}
void 跑()
{
this->身子.跑();
}
void 吃()
{
this->头.吃();
}
头_base 头;
身子_base 身子;
}
struct 头_base
{
virtual void 吃() = 0;
}
struct 身子_base
{
virtual void 跑() = 0;
}
struct 人头 : 头_base
{
void 吃()
{
使用刀叉筷子吃;
}
}
struct 狮子头 : 头_base
{
void 吃()
{
嘴脚并用, 撕着吃
}
}
struct 人身 : 身子_base
{
void 跑()
{
撒开两脚跑;
}
}
struct 狮身 : 身子_base
{
void 跑()
{
四脚跑;
}
}
抽象人_C a(人头, 人身); // 一个人类实例
抽象人_C b(狮头, 狮身); // 一个狮子实例
抽象人_C c(人头, 狮身); // 一个狮身人面实例
基于模板的实现是这样:
复制内容到剪贴板
代码:
template<typename 头trait, 身子trait> class 抽象人_T{
static void 跑()
{
身子trait::跑();
}
static void 吃()
{
头traits::吃();
}
}
struct 人头
{
static void 吃()
{
使用刀叉筷子吃;
}
}
struct 狮子头
{
static void 吃()
{
嘴脚并用,撕着吃
}
}
struct 人身
{
static void 跑()
{
撒开两脚跑;
}
}
struct 狮身
{
static void 跑()
{
四脚跑;
}
}
抽象人_T<人头,人身> a; // 一个人类实例
抽象人_T<狮头, 狮身> b; // 一个狮子实例
抽象人_T<人头, 狮身> c; // 一个狮身人面实例