• ベストアンサー

クラスの練習をしています。

επιστημη(@episteme)の回答

回答No.2

struct Human { ... } struct Building { Human* p; } Building a,b; Human h; a.p = &h; b.p = 0; // 人は建物A にいる。 b.p = a.p; a.p = 0; // AからBへ a.p = b.p; b.p = 0; // BからAへ ...こんだけのことではなくて?

rivalknockout
質問者

お礼

こういうやりかたもあるのですね。 勉強になります。

関連するQ&A

  • C++の練習をしています。

    クラスAをmainでインスタンス化してそれを参照(もしくはポインタ)で他のクラスB内で生成したいのですが、具体的にはどうしたいいでしょうか? またこのような参照は「同期」と似ていると思ったのですが、意味が違うのでしょうか。 初心者で妙な質問かと思いますがどうぞよろしくお願いします。

  • クラス?オブジェクト?インスタンス?何がなんだか・

    一般的なオブジェクト指向の 定義として下記で合っているのでしょうか お願いします クラス:第2実体(人間) インスタンス:第1実体(例:山田) オブジェクト:色々なインスタンスをさして、抽象的に総称としてオブジェクト 例えば・・クラス:人間、インスタンス:山田 クラス:犬、インスタンス:ゴン 違うクラスのインスタンスをまとめて呼ぶ際にオブジェクト? よく分からなくなっています、よろしくお願いします

  • 親クラスのポインタ、クラスを指定しないポインタ

    親クラス A (抽象メソッドX、Yの2つを持つ) と 子クラス B-1 (親はA、抽象メソッドX、Y、Zの3つを持つ) 子クラス B-2 (親はA、抽象メソッドX、Y、Wの3つを持つ) のように、子クラスでポリモーフィズムを実現しているとき、 クラスC   「実行時に、iniファイルに(1)と書かれていたら、B-1のクラスで実体化し、   iniファイルに(2)と書かれていたら、B-2のクラスで実体化する」  というクラスを作りたいです。 //////////////////////////////////////////////////////////////// 質問(1) その際、クラスCは、どうやってもZのメソッドや、Wのメソッドは書けない認識です。 (メソッド名もiniファイルから取るようにすれば別でしょうが。) この認識であっていますでしょうか? 質問(2) 逆に、XとYについては、それぞれ挙動の違う処理を行わせることができる認識です。 (クラスCで、親クラスAのポインタ型の変数を用意しておき、  そのポインタに、DLLのインスタンス化したものをいれておけば、  メソッドXとYについては実行可能という認識です)

  • インスタンス変数とクラス変数の違い

    1つのクラスオブジェクト内のインスタンス全てで共有できる クラス変数 @@a と、 同じインスタンス内であればメソッドの定義を越えてその値を 参照したり、変更したりできるインスタンス変数 @a のスコープの違いをお手すきでしたらご指導願えませんか? あとクラス変数にはセッターやゲッター等のアクセスメソッドを 設定できるんですか? いろいろ知りたいです。

    • ベストアンサー
    • Ruby
  • cocoa、objective-cのクラスをインスタンス化する順番を変えたいのですが可能なのでしょうか?

    cocoa、objective-cなのですが NSTableViewのデータを用意するにあったて データを用意するクラス”A”がIBによってインスタンス化の設定がなされていて クラス”A”が用意するデータがクラス”B”を参照する仕様なのですが、 クラス”B”もIBによってインスタンス化の設定がなされていてIBOutletによって ”A”と”B”お互いに接続されているのですが、クラス”A”がデータを参照するときに まだインスタンス化もしくは接続がなされていないようなので インスタンス化する順番を変えたいのですが可能なのでしょうか? それとも何か他の原因なのでしょうか? ご存知の方教えていただけないでしょうか? よろしくお願いします。

  • 同一クラスインスタンス名で別クラスのインスタンス作成方法(C++)

    下記ソース(Java)の処理をするような、C++の実装方法を教えていただきたいです。 【処理内容】 クラスBのインスタンスを保持しており、クラスBのインスタンス名と同一であるクラスAのインスタンス生成 ClassA A_Instance = (ClassA)Class.forName(B_instance.name).newInstance(); 要はクラスインスタンスの名前の求め方がわからないのです。それさえわかれば、newしてクラスポインタを返すメソッドを用意すれば何とかなると考えていますが。 ※C++のAPI一覧はどこにあるのだろうか・・・

  • クラス、インスタンス、オブジェクトの区別

    クラスが人間という種類だとしたら インスタンスが例えばAさん、Bさんという具体的な人のことで、 オブジェクトが誰でもいいけどとりあえず具体的な誰か という認識でいいでしょうか? だとしたらなんとなくイメージはできたのですが、もっとわかりやすい言葉が欲しいです。 どなたから説明してもらえませんか?

    • ベストアンサー
    • Java
  • templateクラスについて

    先ほど以下のようなプログラムを書いたのですがコンパイルを通すことができません。 //適当なポインタを保持するだけのクラス template <class _type> class hoge { private:   //適当に変数を保持   _type val; public:   //コンストラクタで適当に値をセット   hoge() : val( 0 ){}   //このクラスから唯一ポインタを引っ張ってくる方法   friend _type getVal( const hoge& foo )   {     // そのまま返す     return foo.val;   } }; void func( const hoge<int>& foo ) {   //値を引き出す   getVal( foo ); } void main() {   //実体化   hoge<int> foo;   //値を引き出す   getVal( foo );   //関数の先で値を引き出す   func( foo ); } 上記のようなプログラムを書いたのですが、main関数内でgetValを呼び出す場合はとくに問題ないのですがfunc関数を呼び出してfunc関数内でgetValを呼び出すと error C3861: 'getVal': 識別子が見つかりませんでした error C2365: 'getVal' : 再定義; 以前の定義は '以前は不明な識別子' でした。 コンパイルされたクラスの テンプレート のインスタンス化 'hoge<_type>' の参照を確認してください というエラーが出てしまいます。 func関数の引数を( const hoge<int>& foo )からvoid func( hoge<int> foo )のように参照渡しから実体渡しに変更するとコンパイルが通り、実行もできるのですが、なぜこれでコンパイルが通るのか理由がいまいちよくわかりません。 またやはり、コンストラクタ、デストラクタの問題などから実体渡しより、参照渡しを使いたいのですがどのようにプログラムを書けば今回の問題を解決できますでしょうか。 よろしくおねがいします。 /* VisualStudio2005 AcademicEdition MicroSoft WindowsXP Professional 32bit */

  • 【至急!】クラスの練習をしています。疑問です!もし

    同スーパークラスから継承させた2つのサブクラスをつくりました。 ひとつのサブクラスをインスタンス化し、そのサブクラス内でもう片方のサブクラスをインスタンス化して、 まるでインスタンスが(別の)新しいインスタンスを作るようにしてみることを考えました。 ところが、以下の条件下しか作れないようです。なぜですか? ・継承元が同スーパークラスではないクラス。 ・main関数内。 また、もし作れるならどのようにしたらいいでしょうか? ※C++の練習なのでcharを使っています。 #include <stdio.h> #include <cstring> #include <cstdlib> #include <ctime> class Ningen { protected: char Name[255]; public: /////////////////////// char *ReturnName(void){ return Name; } /////////////////////// }; //人間____名前をもち、与えられた名前を返す能力がある class Player : public Ningen { public: Player(void){ printf("____What's your name?:"); scanf("%s", Name); } }; //人間____Ningenを継承、名前をユーザにきいて名前を入力させる能力がある class Salesman : public Ningen { public: Salesman(const char *str){ strcpy(Name, str);//Name = str; printf("%s\n",Name); } }; //人間____Ningenを継承、名前を引数で入手して表示する能力がある class Build { protected: char BuildingName[255]; }; //建物____Buildという場所をクラスで用意。ここで人オブジェクトが動く。 class Company : public Build{ public: Company(const char *str){ strcpy(BuildingName, str);//BuildingName = str; printf("%s\n",BuildingName); } }; //建物____Buildを継承、名前を引数で入手して表示する能力がある int main(void){ Player *Player_p;//____プレイヤーのポインターを宣言 Player_p = new Player;//____インスタンスを生成してそれを代入 printf("____Are you name?:%s\n", Player_p -> ReturnName()); Company *Company_p; Company_p = new Company("____SystemConsultingCompany"); Salesman *Salesman_p; Salesman_p = new Salesman("____MINAMI"); delete Salesman_p; delete Company_p; delete Player_p; }

  • C++ クラスをメンバにもつクラスについて

    お世話になります。C++初心者でうまくコードが書けません(><) クラス1と2があり、クラス1のメンバにはクラス2があります。 メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。 func2ではクラス1のインスタンスから呼び出された場合にクラス1の m_int1を取得します。 Class Class1{ public:  int m_int1;  Class2 m_Class2; }; Class Class2{ public: void func2(); }; void Class2::func2(){  /*ここの記述方法が分かりません*/  /*C1から呼び出されたらC1のm_int1に100を入れる*/  /*以下間違え*/  class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/  C2_1.m_int1 = 100; } void main(){  class1 C1;  C1.m_int1 = 10;  C1.m_class2.func(); } C1.m_class2.func()の中から呼び出したC1にアクセスする方法が 分かりません(TT)。実体がまだあるのだからアクセスする方法は あると思うのですが・・・ どなたかよろしくお願いします。