5

出于 C++ 学习的目的,我有文件class1.hclass1.cpp和. 我想实例化一个名为inside的对象。我在哪里以及如何实例化这个对象?我是否在构造函数中实例化?class2.hclass2.cppclass1Objclass2classObjclass2

过去我创建了一个指向类的指针,当时效果很好,但我认为指针不是我这次应该采取的路线,因为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

在一个类中实例化一个类:

#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 回答