gpt4 book ai didi

c++ - pg : 172-175 Multiple Interfaces, Stroustrup,C++ 编程语言,3E

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

我很难理解这一点!他想表达什么这一切?

第 172-173 页,他是否创建了一个具有两个接口(interface)(解析器、解析器素数)。然后他是否将每个接口(interface)粘贴在不同的头文件中(parser-implementer.h 和 parser-user.h)。 parser-user.h 具有更小的命名空间定义和 parser-implementer.h 具有更大的(实现者)命名空间定义。但是他为什么要说:“编译器没有足够的信息来检查命名空间的两个定义的一致性。”??如果实际实现在:parser-crud.c,他应该:#include <parser-implementer>这样编译器会保证C 定义与 header 中的声明相匹配。当然是 parser-user.h不会被检查..他是这么说的吗??

然后在 pg:174(下半部分),Parser_interface 是如何依赖于 Parser::expr 的?他到底来这里做什么????他在做什么:

#include <parser-implementer.h>  // this gets namespace Parser into scope
namespace Parser_interface {
using Parser::expr;
}

第 175 页(顶行)驱动程序究竟如何“易受”Parser_interface 接口(interface)中的任何更改????

在那之后我也什么都不懂(直到第 176 页顶部).. 可以有人用头文件、#include 和 make-dependencies 来解释吗??

你能不能有两个:

namespace FOO { bar };
namespace FOO { baz };

定义在一个头文件中??

最佳答案

让我们从命名空间开始。所以你必须明白的是,如果你有 2 个头文件类 Cube_impl.h 和 Cube.h 它们都可以有

namespace Cube { ... }

命名空间是唯一的,将被定义一次。所以他没有声明 2 个同名的 namespace ,而是两次使用相同的 namespace 。因此,在此命名空间内编写的所有内容都将成为其中的一部分。如果适合您,您可以在多个其他类中使用命名空间。通常可以这样访问

Cube::FunctionName

关于“用户”界面和“实现者”界面的使用。

当专业人士想向用户隐藏实现时,这是他们经常使用的一个巧妙的东西。他们创建第一个头文件,其中包含用户的所有公共(public)成员/函数(例如 Cube.h)。然后,他们将为“实现”创建另一个头文件(例如 Cube_impl.h),其中将声明 protected 和私有(private)成员/函数。

好处是您以后可以更改 Cube_impl.h 而不会影响用户,因为他们甚至不知道那里存在的代码。


我没有读过您提到的那本书,但我希望这能回答您的问题。

问候

关于c++ - pg : 172-175 Multiple Interfaces, Stroustrup,C++ 编程语言,3E,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595863/

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