派生クラスから関数の利用


SAITAMA  2005-07-01 02:19:02  No: 58105

クラス関係での質問です。
class CStrHasAtt {
         :
public:
    BOOL Add( unsigned long Id );
};
class CStrComm : public CStrHasAtt{
         :
};
class CApa : public CStrComm{

};

というような派生クラスがあり、CApaクラスで取得したIdを
引数としてCStrHasAttクラスのAdd関数を使いたいのですが、
派生クラスからどのようにAdd関数を使えばよいのかわかりません。
説明不足かもしれませんが、よろしくお願いします。


DD.  2005-07-01 02:32:36  No: 58106

未熟ながら回答させて頂きます。

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;
    }
};

と、いうことでしょうか?


DD.  2005-07-01 02:35:34  No: 58107

追記。

return true;  ←ここあたり適当に戻り値に合わせただけです。

>CStrHasAttクラスのAdd関数
と、あったので一応オーバーライドする形だと勝手に解釈し、
virtualにしてあります。

違ってたらごめんなさい。


SAITAMA  2005-07-01 02:47:52  No: 58108

DD.様ありがとうございます。
先ほどの質問で上乗せして質問ですが、
class CStrHasAtt {
         :
public:
    BOOL Add( unsigned long Id );
};

class CStrComm {
         :
};
class CApa : public CStrComm{
     BOOL Load(){

     }
};

CStrHasAttクラスが単独したクラスだとして、CApaクラスのLoad関数内で
CStrHasAttクラスのAdd関数を呼び出したい場合はどうなのでしょうか?
自分の考えでは、無理かなとも思いますが・・・。


KING・王  2005-07-01 02:59:35  No: 58109

最初の
> 派生クラスからどのようにAdd関数を使えばよいのかわかりません。
に関しては、publicで派生しているので、

CApp CAppObj;
CAppObj.Add(Id);

というような形で、とくに何をしなくても使用できるような気がしますが。

次の質問に関しては、
(1)Add関数が、CStrHasAttクラス内のstaticな関数であれば、次のような形で呼び出せます。
BOOL CApa::Load(){
    CStrHasAtt::Add( Id );
}
(2)CStrHasAttのインスタンスをCApaクラス内で作成し、そのインスタンスを用いれば呼び出せます。

#これで間違いなかったと思います。識者の方、間違っていたらフォローをお願いします。


DD.  2005-07-01 03:13:31  No: 58110

KING・王さんの言うとおり、
>(1)Add関数が、CStrHasAttクラス内のstaticな関数であれば、次のような形
>で呼び出せます。
>(2)CStrHasAttのインスタンスをCApaクラス内で作成し、そのインスタンスを>用いれば呼び出せます。
かなと。

>CStrHasAttクラスが単独したクラスだとして
で、かつ、CStrCommクラスのAddがCStrHasAttクラスのAddをvirtualで
オーバーライドしたものならばvirtualとstaticを併用することができないぽいので
(2)のやり方になるのかなぁ?と、思います。


DD.  2005-07-01 03:15:00  No: 58111

ごめんなさい。読み間違えてました。

>CStrHasAttクラスのAdd関数を呼び出したい場合はどうなのでしょうか?
CStrHasAttクラスって書いてますね^^; CStrCommクラスのAddと勘違いしてました。


SAITAMA  2005-07-01 08:04:06  No: 58112

DD.様、KING王様、レスありがとうございます。

>(2)CStrHasAttのインスタンスをCApaクラス内で作成し、そのインスタンスを用いれば呼び出せます。

  インスタンスとは実体のことですよね?
すいません、クラスについてあまり慣れていないので、どのように作成したらよいかわかりません。
  たびたびの質問で申し訳ありませんが、助言よろしくお願いいたします。


DD.  2005-07-01 08:17:49  No: 58113

そのままになります。

class CStrHasAtt{
public:
    BOOL Add(unsigned long Id);
};

class CApa{
    CStrHasAtt class;
public:
     BOOL Load(unsigned long Id){
         class.Add(Id);
     }
};

な、かんじかと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加