2013年6月21日金曜日

c++で親クラスのコンストラクタを呼び出す

どうも、俺@家です。

C++でとある基底(親)クラスから派生した子クラスのコンストラクタ内で
親クラスのコンストラクタを呼び出したい場合は、

// 親クラス
class Parent
{
public:
  // 親クラスのコンストラクタ
  Parent()
  {
  };
};


// 子クラス
class Child: public Parent
{
public:
  // 子クラスのコンストラクタ
  Child(): Parent()
  {
  };
};
と書きます。
簡単ですね。

ちなみに子クラスから親クラスの何らかのメソッドを呼び出したい場合は、
// 親クラス
class Parent
{
public:
  // methodParent()の定義
  void methodParent()
  {
  };
};

// 子クラス
class Child: public Parent
{
public:
  void Child::methodChild()
  {
    // 親クラスのmethodParent()を呼びたい
    Parent::methodParent();
  };
};
のように、親クラス名::メソッド名と書きます。
※楽して上のように書きましたが、
 関数の重複定義でコンパイルエラーになる場合があるので、
 宣言する.hファイルと関数の内容を書く.cppファイルとは別けて書きましょう。


ちなみにphpだと
// 親クラス
public class Parent
{
  public function __construct()
  {
  }
}

// 子クラス
public class Child extends Parent
{
  public function __construct()
  {
    parent::__construct();
  }
}
のように、parent::メソッド()のように書きます。


ちなみにObjective-Cはコンストラクタがなくてイニシャライザになりますが、同様に
// 親クラスの.mファイル
@implementation Parent
- (id)init
{
  if ((self = [super init])) {
  }
  return self;
}
@end


// 子クラス .hファイル
@interface Child: Parent
- (id)init;
@end

// 子クラス .mファイル
@implementation Child
- (id)init
{
  if ((self = [super init])) {
  }
  return self;
}
@end
のようにsuperを使って書きます。
そもそもParentクラスも少なくともNSObjectを継承するのでsuperが出てきちゃいますね。


以上でぇぇぇぇえす。

0 件のコメント: