私は作っているばかりの文法エラーだと確信していますが、CLimb
から派生したクラスCNeck
がデフォルトのコンストラクタを呼び出すと、別のコンストラクタCNeck(*parent)
を呼び出すと、指定された基本コンストラクタの約半分を呼び出すように見えますが、コンパイラのデフォルトのコンストラクタや何か変わったものが使われます。派生クラスが全体のベースコンストラクタを呼び出さない派生クラス
main.cppに
int _tmain(int argc, _TCHAR* argv[])
{
CNeck neck01;
CLimb *ptr;
ptr = &neck01;
CNeck neck02(ptr);
return 0;
}
limb.h(親クラス)
class CLimb
{
public:
CLimb(void);
CLimb(CLimb *_parent);
~CLimb(void);
float cut;
float bone;
float resistance;
//attributes
bool isBurned;
bool isBleeding;
bool isOnFire;
bool isNeedFirstaid;
CLimb *parent;
};
limb.cpp(親クラス)
#include "limb.h"
CLimb::CLimb(void) :
cut(10),
bone(10),
resistance(10),
//attributes
isBurned(0),
isBleeding(0),
isOnFire(0),
isNeedFirstaid(0)
{
parent = NULL;
}
CLimb::CLimb(CLimb *_parent) :
cut(10),
bone(10),
resistance(10),
//attributes
isBurned(0),
isBleeding(0),
isOnFire(0),
isNeedFirstaid(0)
{
parent = _parent;
}
CLimb::~CLimb(void)
{
}
neck.h(子クラス)
#include "limb.h"
class CNeck :
public CLimb
{
public:
CNeck(void);
CNeck(CLimb *_parent);
~CNeck(void);
};
neck.cpp(子クラス)
#include "Neck.h"
CNeck::CNeck(void)
{
}
CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
{
}
CNeck::~CNeck(void)
{
}
あなたが見ることができるように、子クラスは親のコンストラクタを呼び出す以外に何もしない、まだ私はプログラムをステップ実行するとき、私は次の取得結果:
CNeck neck01;
:通常
:値cut、bone、resistance、isBurnedはすべて適切な値を持ちますが、isBleeding、isOnFire、およびisNeedFirstaidはすべて0ではなく1に等しくなります。 CNeck :: CNeck(* parent)の本体はまだ実行されています。
CNeck neck02(ptr);
の代わりにCLimb limb(ptr);
をテストして呼び出すと、すべての値に正しい値が割り当てられました。
「手」とは何ですか? – Beta
それは悲しいクラスです – AngryWhenHungry
申し訳ありませんが、私はコピー貼り付けエラーを修正しました。 –