需要友元类/友元成员函数的声明和定义之间相互依赖的例子(来自C++ Primer)

问题描述 投票:0回答:0

我是 C++ 的新手,目前正在阅读 C++ Primer,在第 7 章(讨论最基本的类特性)中,它谈到了当我们想让成员函数成为另一个类的友元时“仔细结构化”的重要性:

*“使成员函数成为友元需要仔细构建我们的程序,以适应声明和定义之间的相互依赖性。在这个例子中,我们必须按如下顺序排列我们的程序:

  • 首先定义Window_mgr类,声明,但不能定义,clear。 Screen 必须在 clear 可以使用 Screen 的成员之前声明。
  • 接下来,定义类 Screen,包括用于清除的友元声明。
  • 最后定义clear,现在可以引用Screen中的成员"*

我的问题是:

  1. 他们说的“顺序”,是指我写代码的顺序吗?我认为编译器不关心我是否在类的头文件/cpp 文件之间来回跳转。
  2. 我计划以结构体的头文件和成员函数/相关函数的单独cpp文件的形式编写类。你能给我一个具体的例子来说明如何协调这些步骤吗?
  3. 关于类的一个相关问题:当我定义类 B 时,它有一个返回类型类 A 的成员函数/有一个类 A 参数,我需要包含类 A 的头文件还是只需要在顶部声明类 A B 类的头文件,如 class A; 然后在我定义成员函数的 classB.cpp 中包含 classA.h?

非常感谢!

以下是书中 Window_mgr 和 Screen 的示例代码,用于上下文:

class Screen {
    friend void Window_mgr::clear(ScreenIndex);
    //...rest of the Screen class
};

class Window_mgr {
    public:
        using ScreenIndex = std::vector<Screen>::size_type;
        void clear(ScreenIndex);
    // rest of the class
};

void Window_mgr::clear(ScreenIndex i)
{
    // s is a reference to the Screen we want to clear
    Screen& s = screens[i];
    // reset the contents of that Screen to all blanks
    s.contents = string(s.height * s. width, ' ');
}



这篇文章认为一般不了解朋友/班级......所以任何细节都可以提供帮助。谢谢!

class declaration friend
© www.soinside.com 2019 - 2024. All rights reserved.