如何为外部类的对象实例化内部类的构造函数

How can I instantiate the constructor of the inner class for an object of the outer class?

本文关键字:对象 实例化 内部类 构造函数 外部      更新时间:2023-10-16

我正在尝试实现一个类,它有另一个类作为成员。

class Book
{
    class Author;
}

在.cpp文件中,我实现类Author,如下所示:

class Author
{
    string firstName;
    string lastName;
public:
    // the constructor for the class
    Author(string _firstName, string _lastName)
    {
        firstName = _firstName;
        lastName = _lastName;
    }
}

我想做以下事情:在main中,当我声明类Book的对象时,我希望它从上面的代码中实例化类Authorook类的构造函数来实现这一点,然后使用它们实例化Author的构造函数,如下所示:

Book::Book(string a, string b)
{
    Book::Author(a, b);
}

但如果我这样做,如果我有另一个内部类,作为类Book的成员,比如说有-4个成员,那么对于Book构造函数来说,我会有太多的参数。

所以我的问题是:当我创建主类的对象时,是否有其他方法可以实例化作为成员的类的构造函数?

还有,如果这些成员是类,我该如何打印主类的成员?我试图使<lt;内部类的运算符,但我得到错误:"无效使用非静态数据成员。"

我认为您在C++内部类方面犯了一个错误。没有内部类只有嵌套类,这是不一样的。

嵌套类是在另一个类的定义/声明中进行定义/声明的类。但是,这个关系是类型上的关系,而不是类实例上的关系。

如果你想为一本书找到一位作者,你必须建立一个聚合或类似的东西,比如:

class Book {
  class Author {
    string name;
    // How to initialize an author (give him a name)
    Author(string n) : name(n) { }
  };
  string title;
  Author theAuthorOfTheBook;
  // How to initialize a book (giving him a title and setting up an author with a given name)
  public :
  Book(string t,string n) : title(t), theAuthorOfTheBook(n) {}
};

嵌套定义很有趣,因为您可能有其他一些创作的概念,用于不同的目的,而与图书创作无关。这个嵌套的定义可以让您轻松地谈论图书创作(Book::Author)。

我添加了一个字段theAuthorOfTheBook来定义Book概念的属性。这可能需要在Book的构造中进行初始化(参见actors定义)。