C++で多態

ふと、C++書いてて同じようなクラスが連続することに気づいた。
こんな感じ


#include
/** 引数に渡った文字列を表示する */
void Print(const char * p)
{
std::cout << p << std::endl;
}
/** Aclassはshow(const char * p)を持つ */
class Aclass{
public:
char Property[100];
Aclass(){ memset(&Property, '\0', sizeof(Property)); }
void show(const char * p){ Print(p); }
};

/** Bclassもshow(const char * p)を持つ */
class Bclass{
public:
char Property[10];
Bclass(){memcpy(&Property,"bclass:", sizeof("bclass:")); }

void show(const char * p){
char Temp[500];
memset(&Temp, '\0', sizeof(Temp));
strcat(Temp,Property);
strcat(Temp,p);
Print(Temp);
}
};

int main()
{
Aclass * a1;
Bclass * b1;
// それぞれ個別に実行
a1 = new Aclass();
b1 = new Bclass();
a1->show("this is a");
b1->show("b!!!!!!"); // showは同じなのだから、まとめたい

return 0;
}

javaだと共通のインターフェースをimplementsさせてインターフェースからインスタンスをメソッドを叩くような処理である。
これをC++でやるのに何か巧い方法はないものか、とGoogle先生に尋ねたところ、templateを使うのが良いらしい。
ふぅん、なかなか手が出なかったtemplateだが、いい機会だから手を出してみようか。