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

C++ - How to instantiate object with constructor private in another class

我有一个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();
}

我的问题:

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

上使用的那样使用

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

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

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