pg:172-175多接口,Stroustrup,C++编程语言,3E

pg: 172-175 Multiple Interfaces, Stroustrup, C++ Programming Language, 3E

本文关键字:Stroustrup C++ 编程语言 3E 接口 172-175 pg      更新时间:2023-10-16

我很难理解这一点!他想说什么所有这些?

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

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

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

pg 175(顶行)驱动程序究竟是如何"易受攻击",以应对Parser_interface接口中的任何更改的????

在那之后我也什么都不懂(直到176页顶部)。。能够有人用头文件、#include和make依赖关系来解释??

你能要两个吗:

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

定义在一个头文件中??

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

namespace Cube { ... }

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

Cube::FunctionName

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

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

这样做的好处是,您以后可以在不影响用户的情况下更改Cube_impl.h,因为用户甚至不知道那里的代码。


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

问候