クラス関係での質問です。
class CStrHasAtt {
:
public:
BOOL Add( unsigned long Id );
};
class CStrComm : public CStrHasAtt{
:
};
class CApa : public CStrComm{
};
というような派生クラスがあり、CApaクラスで取得したIdを
引数としてCStrHasAttクラスのAdd関数を使いたいのですが、
派生クラスからどのようにAdd関数を使えばよいのかわかりません。
説明不足かもしれませんが、よろしくお願いします。
未熟ながら回答させて頂きます。
class CStrHasAtt {
:
public:
virtual BOOL Add( unsigned long Id );
};
class CStrComm : public CStrHasAtt{
public:
virtual BOOL Add( unsigned long Id );
};
class CApa : public CStrComm{
public:
virtual BOOL Add( unsigned long Id ){
CStrComm::Add(Id);
return true;
}
};
と、いうことでしょうか?
追記。
return true; ←ここあたり適当に戻り値に合わせただけです。
>CStrHasAttクラスのAdd関数
と、あったので一応オーバーライドする形だと勝手に解釈し、
virtualにしてあります。
違ってたらごめんなさい。
DD.様ありがとうございます。
先ほどの質問で上乗せして質問ですが、
class CStrHasAtt {
:
public:
BOOL Add( unsigned long Id );
};
class CStrComm {
:
};
class CApa : public CStrComm{
BOOL Load(){
}
};
CStrHasAttクラスが単独したクラスだとして、CApaクラスのLoad関数内で
CStrHasAttクラスのAdd関数を呼び出したい場合はどうなのでしょうか?
自分の考えでは、無理かなとも思いますが・・・。
最初の
> 派生クラスからどのようにAdd関数を使えばよいのかわかりません。
に関しては、publicで派生しているので、
CApp CAppObj;
CAppObj.Add(Id);
というような形で、とくに何をしなくても使用できるような気がしますが。
次の質問に関しては、
(1)Add関数が、CStrHasAttクラス内のstaticな関数であれば、次のような形で呼び出せます。
BOOL CApa::Load(){
CStrHasAtt::Add( Id );
}
(2)CStrHasAttのインスタンスをCApaクラス内で作成し、そのインスタンスを用いれば呼び出せます。
#これで間違いなかったと思います。識者の方、間違っていたらフォローをお願いします。
KING・王さんの言うとおり、
>(1)Add関数が、CStrHasAttクラス内のstaticな関数であれば、次のような形
>で呼び出せます。
>(2)CStrHasAttのインスタンスをCApaクラス内で作成し、そのインスタンスを>用いれば呼び出せます。
かなと。
>CStrHasAttクラスが単独したクラスだとして
で、かつ、CStrCommクラスのAddがCStrHasAttクラスのAddをvirtualで
オーバーライドしたものならばvirtualとstaticを併用することができないぽいので
(2)のやり方になるのかなぁ?と、思います。
ごめんなさい。読み間違えてました。
>CStrHasAttクラスのAdd関数を呼び出したい場合はどうなのでしょうか?
CStrHasAttクラスって書いてますね^^; CStrCommクラスのAddと勘違いしてました。
DD.様、KING王様、レスありがとうございます。
>(2)CStrHasAttのインスタンスをCApaクラス内で作成し、そのインスタンスを用いれば呼び出せます。
インスタンスとは実体のことですよね?
すいません、クラスについてあまり慣れていないので、どのように作成したらよいかわかりません。
たびたびの質問で申し訳ありませんが、助言よろしくお願いいたします。
そのままになります。
class CStrHasAtt{
public:
BOOL Add(unsigned long Id);
};
class CApa{
CStrHasAtt class;
public:
BOOL Load(unsigned long Id){
class.Add(Id);
}
};
な、かんじかと。
ツイート | ![]() |