假如要实现,一个类型:表示狮身人面的动物
基于类的实现是这样:
复制内容到剪贴板
代码:
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; // 一个狮身人面实例