C ++ - 如何在另一个类中使用构造函数private实例化对象

时间:2015-07-18 12:38:06

标签: c++ object instantiation

我有class Piece我已将默认构造函数设为private,因为我想在创建对象时仅使用特定的构造函数:

class Piece
{
private:
  Piece();
public:
  Piece (int var1, int var2);
  ~Piece();
}

现在我的class Game有一个vector of Pieces

class Game
{
private:
  std::vector<Piece> m_pieces;
public:
  Game();
  ~Game();
  CreatePieces(); //<-- only here, I will create the Piece objects, not in the constructor
}

现在我想要一个class Foo,其中包含Piece

class Foo
{
private:
  Piece m_piece;//ERROR!!! cannot access private member declared in class 'Piece'
public:
  Foo();
  ~Foo();
}

我的问题:

现在我需要在m_piece上使用Foo class的默认构造函数。 但我想避免这种情况,并按照我在Game class上使用的那样使用。

无论如何,我可以将Piece class 保持原样,并创建一个Piece object,就像在Foo class中一样,但是使用构造函数对其进行初始化我Piece (int var1, int var2);构造函数上的Foo()

1 个答案:

答案 0 :(得分:7)

您可以在m_piece构造函数中初始化Foo以调用特定的构造函数,例如:

class Foo
{
    Foo() : m_piece(0,0)
    {
    }
}