如何实例化C ++类中的对象?

时间:2012-11-06 10:26:14

标签: c++ instantiation

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

过去我创建了一个指向类的指针,该指针在那段时间运行良好,但我认为指针不是我应该采用的路径,因为classObj只会在class2内使用1}}。

4 个答案:

答案 0 :(得分:7)

class class1
{
   //...
};

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

在class2 ctor中,您可以在构造函数初始化列表中初始化member

class2::class2(...)
: member(...)
{
   //...
}

答案 1 :(得分:3)

那你是怎么创造过去的指针的?据推测,你做过这样的事情:

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;
};

答案 2 :(得分:1)

这取决于你的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;
};

答案 3 :(得分:1)

在类中实例化一个类:

#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;
}