|
|
久々のお客様の書き込みに感涙に咽んでおります。
>おなし名前の関数
継承かポリモーフィズムですね。
ポリモーフィズムの場合、
class SomeClass {
public:
int Add(int arg1, int arg2);
double Add(double arg1, double arg2);
};
みたいに、関数名だけが同じで引数・返値型の異なる関数が並びます。
ここで
SomeClass c;
c.Add(1, 2);
とやれば int Add() が呼び出され、
c.Add(1.0, 2.0);
とやれば double Add() が呼び出されます。
要するに、やることが同じだったら、引数が違っても同じ名前の関数で使えたほうが
良いじゃん?というのがポリモーフィズムの考え方です。
C 言語の場合、処理すべき型によって itoa() とか ltoa() とか dtoa() とか
「機能が同じだけど型が違うから名前が違う」関数セットがありますよね。
あれが class.toString() みたいな名前で一本化できます。
継承の場合、親クラスと同じ名前・返値・引数の関数が子クラスに引き継がれます。
class SuperClass {
public:
int Add(int arg1, arg2);
};
class SubClass : public SuperClass {
public:
int Add(int arg1, arg2);
};
みたいなパターンが継承。この場合
SuperClass c1;
SubClass c2;
c1.Add(1,2);
c2.Add(1,2);
とやった場合、名前は同じでも実体は違う関数が呼び出されます。
Add() という関数ではあまり有難味がわかりませんが、たとえば
TextObject.SaveToFile("test.txt");
HTMLObject.SaveToFile("test.htm");
ImageObject.SaveToFile("test.bmp");
みたいな使い方ができれば便利ですよね。C 言語だったら
SaveTextToFile(struct TextObject*, char *FileName);
SaveHTMLToFile(struct HTMLObject*, char *FileName);
SaveImageToFile(struct ImageObject*, char *FileName);
みたいになるところを、「機能が同じであれば関数名も同じ」として
記述できるわけです。
|
|