我如何在C 类的内部实例化对象

How do I instantiate an object inside of a C++ class?

本文关键字:内部 实例化 对象      更新时间:2023-10-16

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

过去,我创建了一个指针,该班级在这段时间效果很好,但是我认为指针不是我应该花时间的路线,因为classObj仅在class2中使用。

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

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

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

过去是如何创建指针的?大概,您做了这样的事情:

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

在类中实例化类:

#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 continuen";
  cin.ignore();
  cin.get();
   return 0;
}

它取决于您的class1。如果其构造函数接受一些参数,则必须在类别2构造函数或初始化列表中明确初始化它。

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