5

C++ の学習用に、ファイルclass1.hclass1.cppclass2.hおよびがありclass2.cppます。class1Objinsideという名前のオブジェクトをインスタンス化したいと思いますclass2。このオブジェクトをどこでどのようにインスタンス化するのですか? コンストラクターclassObj内でインスタンス化しますか?class2

classObj過去に、クラスへのポインターを作成しましたが、それは当時はうまく機能していましたが、は 内でのみ使用されるため、今回はポインターを使用する必要はないと思いますclass2

4

4 に答える 4

10
class class1
{
   //...
};

class class2
{
   class1 member; 
   //...
};

class2 ctor ではmember、コンストラクタの初期化リストで初期化できます。

class2::class2(...)
: member(...)
{
   //...
}
于 2012-11-06T10:33:40.720 に答える
7

さて、過去にどのようにポインタを作成しましたか? おそらく、あなたは次のようなことをしました:

class class2
{
  public:
    class2()
    {
      class1Pointer = new class1();
    }
    // Destructor, copy constructor/assignment, etc...
  private:
    class1* class1Pointer;
};

今度はまったく同じことをしたいのですが、今回は へのポインターは必要なく、それ自体class1が必要です。class1

class class2
{
  public:
    class2() {}
    // Destructor, copy constructor/assignment, etc...
  private:
    class1 class1Obj;
};

class2オブジェクトは、オブジェクトの作成時にデフォルトで初期化されます。class1 コンストラクターがいくつかの引数を取る必要がある場合は、初期化リストを使用します。

class class2
{
  public:
    class2() : class1Obj(1, 2, 3) {}
    // Destructor, copy constructor/assignment, etc...
  private:
    class1 class1Obj;
};
于 2012-11-06T10:33:42.430 に答える
3

class 内でクラスをインスタンス化します。

#include <iostream>
using namespace std;



class Foo 
{
 public:
     Foo(int i) 
     {

     }  
};

class Bar  
{     
  Foo i;  //<--- instantiate a class inside a class ----
  public:

  Bar() : i(1)  //<--- instantiate a class inside a class ----
  {

  }  
};





int main(void)
{


  Bar b;




  cout<<" \nPress any key to continue\n";
  cin.ignore();
  cin.get();

   return 0;
}
于 2012-11-06T13:05:35.193 に答える
2

Class1 によって異なります。そのコンストラクターがいくつかのパラメーターを受け入れる場合は、Class2 コンストラクターまたは初期化リストで明示的に初期化する必要があります。

Class2 {
public:

    class2() {
        //Here m_class1Obj will be instantiated
        m_class1Obj = Class1(/*some params*/);
    }

private:
    Class1 m_class1Obj;
};

または

Class2 {
public:

    class2() : m_class1Obj() {}

private:
    Class1 m_class1Obj;
};
于 2012-11-06T10:35:06.180 に答える