- ベストアンサー
内部クラスから別の内部クラスのインスタンスを取得するには
yusukeyの回答
こんな↓のでコンパイルできますね。 class A { class B { B(){ new C(); } } class C {} }
関連するQ&A
- 内部クラスのインスタンスを外部クラスが保持する場合
C++での内部クラスの宣言の仕方なのですが、例えば、 class Outer { private: class Inner; public: Outer(); ~Outer(); }; class Outer::Inner { public: Inner(); ~Inner(); }; のように単純に内部クラスが宣言されているだけならば、 その具体的な定義を外側に書くことは可能と思うのですが、 class Outer { private: class Inner { public: Inner(); ~Inner(); }; public: Outer(); ~Outer(); Inner inner; //内部クラスのインスタンス }; のように外部クラスが内部クラスのインスタンスを保持していた場合には、 上記のようにインスタンス作成より上で外部クラスの宣言内に内部クラスの定義を書かないと、 コンパイルが通らない(VC++2008)と思います。具体的な中身がないままインスタンスを 作っているのでエラーを吐く理由もわからないでもないですが、 見易さ的に上の例のようにかけないのかなとも思ったりします。 インスタンスを外部クラスに持たせずともどうとでもなるのですが、 あえて上のようなことをしたくなった場合には下のような方法で記述する以外ないのでしょうか?
- ベストアンサー
- C・C++・C#
- 同一クラスインスタンス名で別クラスのインスタンス作成方法(C++)
下記ソース(Java)の処理をするような、C++の実装方法を教えていただきたいです。 【処理内容】 クラスBのインスタンスを保持しており、クラスBのインスタンス名と同一であるクラスAのインスタンス生成 ClassA A_Instance = (ClassA)Class.forName(B_instance.name).newInstance(); 要はクラスインスタンスの名前の求め方がわからないのです。それさえわかれば、newしてクラスポインタを返すメソッドを用意すれば何とかなると考えていますが。 ※C++のAPI一覧はどこにあるのだろうか・・・
- 締切済み
- C・C++・C#
- クラスのインスタンス名をクラス内で取得できますか?
クラスのインスタンス名をクラス内で取得できますか? 今VC++6.0を使っています。例として下記のクラスのコンストラクタで CTest::CTest() { TRACE("%s",typeid(this).name()); } としておいて、 別なクラスで CTest testInst; を生成すると デバッグエリアに 「class CTest *」 と表示することはできました。 これが出来るのなら、インスタンス名 testInst をCTestクラスの内部から 取得することは出来ないのかと思ったのですが、 取得することは可能なのでしょうか?
- ベストアンサー
- C・C++・C#
- 内部クラスのインスタンスを動的に取得したい
class test { public test(String str){ try{ Class c = Class.forName("test$TESTSUB" + str); c.newInstance(); // ココでエラー }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args){ new test(args[0]); } class TESTSUB1 { public TESTSUB1(){ System.out.println("# " + toString()); } } class TESTSUB2 { public TESTSUB2(){ System.out.println("# " + toString()); } } } 上記のようなコードにより、内部クラスのインスタンスを 動的に得たいと思っていますが、エラーとなってしまいます。 エラー回避方法、または他にいい方法がありましたら、 ご教示のほどよろしくお願いいたします。
- ベストアンサー
- Java
- 内部クラス?のエラー
内部クラス?のエラー 今晩は、JAVA初心者です、宜しくお願い致します。 下のようなプログラムを書いてやりました。 <A>のように全体のプログラムを1つのクラスの中に別のクラスを入れる(内部クラス?)と、 「アクセス可能な型Testのエンクロージング・インスタンスがありません。 型Testのエンクロージング・インスタンスで割り振りを限定する必要があります。 (例えばx.new A()でxはテストのインスタンス)」というエラーがでます。 しかし、<B>のように別のクラスにすると、エラーは出ません。 この原因がよくわかりません。 ==================================================================== <A> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } } ==================================================================== <B> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } ====================================================================
- ベストアンサー
- Java
- 別のクラスのインスタンスの作り方
現在、javaからrubyに移行するために勉強しているのですが、別のファイルに定義したクラスのインスタンスが作成できなくて、困っています。 具体例をあげると require './B' class A end def initialize b = new B end end --別のファイル class B def initialize p 'hello' end public : initalize end こんな2つのファイルがあったとして、Aのインスタンスを作成すると、 undefined method `B’ というエラーがでます。 私としてはこのエラーの原因がinitializeがデフォルトでprivate宣言なのが原因だと考えているのですが、publicと指定してもエラーとなることから、いくつか疑問が湧いたので質問させていただきます。 1、そもそもBクラスのインスタンスが作成できないのはinitializeがデフォルトでprivate宣言なのが原因なのか? 2、1があっていたと仮定するとBクラスのinitializeをpublic指定しているのになぜ呼び出せないのか? 3、rubyはなぜデフォルトでinitializeがprivateなのか?(javaではコンストラクタをprivateにするということは普通はしない。使うときはシングルトンやUtilのようなクラスを作るときに限る) 以上です。よろしくお願いします。
- ベストアンサー
- Ruby
- 基本クラスに派生クラスのインスタンスを持たせたいのですが.....
A.h//////// #pragma once #include "B.h" class A{ B* b; } B.h/////// #pragma once #include "A.h" class B : public A{ } ////////////// 上のようなクラス構成にさせたいのですが..... #include "A.h"をB.hに追加したところでエラーが出ます。 基本クラスに派生クラスのインスタンスを持たせたいのですが.... どのようにすれば良いでしょうか? エラー内容は : error C2143: 構文エラー : ';' が '*' の前にありません。 : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません この三つが出ます。 何方かよろしくお願いしますm(_ _)m
- 締切済み
- C・C++・C#
- アンドロイドで、別のクラスのインスタンスを呼ぶ方法
アンドロイドの場合、別のクラスのインスタンスを呼び出すにはどうしたら良いですか? どうしてもわからずとても困っています。どうかご教授下さい。 例えば、Activityを継承しているクラスAがImageViewを継承しているクラスIのインスタンスを呼び出したいとします。 通用ならクラスA内で、 ExtendsImageView myExtendsImageView = new ExtendsImageView(); なんてインスタンス変数もたせて、 myExtendsImageViewから変数なりメソッドなり呼び出せれば済む話なんですが、 アンドロイドの場合、 アプリの起動時に自動的にActivity継承クラスとImageView継承クラスのインスタンスが生成されるようです。 そしてそのインスタンスがどこにあるかわからないので、呼び出すことができません。 無理やり、 ExtendsImageView myExtendsImageView = new ExtendsImageView(); と新しくインスタンスをつくるのも変な気がします・・・。 どのようにすれば別のクラスのインスタンスを呼び出すことができるでしょうか?どうかご教授下さい。。
- 締切済み
- Java
- インスタンス変数の特殊な参照
次のようなクラスを考えたときに(特に意味があるものではないですが) class A{ int a; A(){ a = 10; B b = new B(); } } class B{ int b; B(){ b = 20; C c = new C(); } } class C{ int c; C(){ c = 20; } } Cのコンストラクタの中から、Aのインスタンス変数aやBでのbの値を 参照することって出来ないのでしょうか? 変数をクラス変数にする、引数として渡す以外の方法を探しています。
- 締切済み
- Java
- クラスのインスタンス作成について
以下のようなクラス(単純化しています)とテスト関数内でインスタンス生成しています。どちらも意味は同じですが、(1)はtest関数を抜けると勝手に消滅(デストラクタ)してくれますが、(2)はdeleteを使わないと消滅しません。 (2)の方が面倒くさい(new, delete)ですが、(2)を使わないといけない場面や理由が想像できません。クラスの配列なら意味がある???と思いますが、1つのインスタンスで(2)にする場合どんな利点があるのでしょうか? class A { }; void test{ A a; -----> (1) A *pa = new A; -+ (2) delete pa; -+ } あと、A::TEISU = 1とクラスのグローバル定数を設定したいのですがどうすればよいのでしょうか?
- ベストアンサー
- C・C++・C#
お礼
yusukey様へ ご回答ありがとうございました。 勉強になりました。