2003-05-21 [長年日記]
@ [c++] スーパークラスのコンストラクタ呼び出し
ずっとどうやるのだろうと思案してましたが、下記のような感じでOKらしい。
#include <string>
/**
* スーパークラス
*/
class MyObject {
public:
MyObject(string s)
:
name(s)
{}
virtual string getName()
{
return name;
}
private:
string name;
};
/**
* サブクラス
*/
class ExtendedObject : public MyObject {
public:
ExtendedObject(string s)
:
MyObject(s) // スーパークラスのコンストラクタを呼ぶ
{}
};
int main(int argc, char** argv)
{
MyObject o1("super");
cout << o1.getName() << endl;
ExtendedObject o2("sub");
cout << o2.getName() << endl;
return 0;
}
実行結果
$ g++ MyObject.cpp $ ./a.out super sub
ちなみにgetName関数がvirtualになっているのに特別な意味はないです。
こんな感じでやってました。<br>class ExtendObject : public MyObject {<br>public:<br> ExtendObject (string s) : MyObject (s){<br> ...<br> }<br>};
え、それは僕の例とどういう違いが?
おお、同じだ!(あほ)