gpt4 book ai didi

c++ - 嵌套类——在 C++ 中将声明与定义分开

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:40 24 4
gpt4 key购买 nike

是否可以将类声明与其定义分开?当然可以,但是如果我想在实际定义它之前拥有这个类的一个对象怎么办?考虑以下示例:

class ID3_Reader{
public:
// code omitted for brevity
protected:
class Mp3_File;
Mp3_File mFile;
};

很明显编译不过。我必须在 ID3_Reader 类中定义 Mp3_File 类。当我只有两个类时,这不是问题。如果他们有五个呢?我的代码会变得非常困惑。为了避免这个问题,我必须将类声明与其定义分开。我怎样才能做到这一点?请记住,我需要 ID3_Reader 类中的 Mp3_File 类实例。我使用嵌套类的原因是因为我不想让其他程序员使用 Mp3_File 类。我使用了“protected”关键字,因为我将基于 ID3_Reader 类创建类。

最佳答案

您可以像其他人回答的那样使用指针来实现这一点:

class Mp3_File; // forward declaration of class Mp3_File

class ID3_Reader{
public:
// code omitted for brevity
protected:
Mp3_File *mFile;
};

或者你可以将 class Mp3_File 的构造函数声明为私有(private),并声明 class ID3_Reader friendclass Mp3_File:

class Mp3_File {
Mp3_File() {} // constructor is private
friend class ID3_Reader;
};

class ID3_Reader{
public:
// code omitted for brevity
protected:
Mp3_File mFile;
};

auto main() -> int {
ID3_Reader r;
Mp3_File m; // Error Mp3_File constructor is private!

return 0;
}

因此,其他人将无法使用 Mp3_File,而您可以在 class ID3_Reader 范围内使用它。

关于c++ - 嵌套类——在 C++ 中将声明与定义分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24111412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com