• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オブジェクト指向で、インターフェースにないメソッドを呼ぶ)

オブジェクト指向でインターフェースにないメソッドを呼ぶ方法とは?

このQ&Aのポイント
  • C++でポインターを抽象化するために、オブジェクト指向を使用しています。
  • インターフェースは同じなのに継承先に内含されている変数のタイプが異なり、それを取得したい場合が出てきました。
  • この問題を解決するためには、ポインターを取得するためのメソッドを追加するなどの方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

dynamic_cast します。 #include <iostream> #include <exception> // ポインターを抽象化 class PointerInterface { public:  virtual ~PointerInterface() {} }; // 抽象化したクラスを継承して整数型のポインタを作る class IntPointer : public virtual PointerInterface {  friend void setIntPointer( PointerInterface* ptr, int value ); private:   // int型のポインタ   int *p; public:   int* get()   {     return p;   } }; // 抽象化したクラスを継承して少数型のポインタを作る class FloatPointer : public virtual PointerInterface { private:   float *p; public:   float* get()   {     return p;   } }; PointerInterface* CreateInterface( bool flag ) {   PointerInterface* result = 0;   if( flag )   {     result = new IntPointer;   }   else   {     result = new FloatPointer;   }   return result; } void setIntPointer( PointerInterface* ptr, int value ) {  IntPointer* ip = dynamic_cast<IntPointer*>(ptr);  if ( ip != 0 ) {   ip->p = new int(value);  } } int getIntPointer( PointerInterface* ptr) {  IntPointer* p = dynamic_cast<IntPointer*>(ptr);  if ( p != 0 ) return *(p->get());  else throw std::exception(); } void main() {   PointerInterface* ptr = CreateInterface( true );   setIntPointer( ptr, 123 );   std::cout << getIntPointer(ptr) << std::endl; }

0xEF
質問者

お礼

ありがとうございます。 やはりキャストするしかないのですかねぇ・・・ なんかいいデザインパターンとかあればいいんですが・・・ 思い浮かばなくて・・・ 参考にします。ありがとうございました。

その他の回答 (1)

回答No.2

> やはりキャストするしかないのですかねぇ・・・ > なんかいいデザインパターンとかあればいいんですが・・・ templateが封じられてるので仕方ないですね。

0xEF
質問者

お礼

今回は速度より安全性をとってdynamic_castを使用することにします。 ありがとうございました。

関連するQ&A