如果C ++头文件包含私有成员变量声明,它如何被视为类的“接口”?

时间:2015-11-04 23:25:13

标签: java c++ interface header-files

尝试在长期使用Java之后重新学习C ++,我read在SO上也模糊地记得当一个类在头文件中声明并在cpp文件中定义时,它会分裂它接口(h文件)来自其实现(cpp文件)。

但是,如果h文件包含私有成员变量声明,那么如何将h文件视为接口?成员变量的选择限制了实现,不是吗?不同的实现可能使用完全不同的变量集。

例如,复数类可以用实数和虚数变量实现,也可以用幅度和参数变量实现,但是支持同一组getter和setter以及你有什么。

将接口与实现分离的唯一方法不是从类似于Java interface的基类继承纯虚拟机吗?

1 个答案:

答案 0 :(得分:1)

没有。头文件和接口在C ++之前很久就用C构造。在C land中执行此操作的常用方法是通过不透明类型。如果一个对象有一个指向定义为char **或char [x]的东西的指针,那么只表示你的大小,所以你无法看到它。很好的例子包括与Sybase和IBM中间件相关的大多数内容。你不能构建'直接对象,你必须通过他们的工厂方法。

在C ++中,这通常是通过Pimpl模式和私有成员实现的。虽然你仍然可以看到一些比特;您仍然可以针对该界面进行编程。此外,不是每种类型都会暴露给您。它不像切割干燥。

与其他任何东西都有权衡。通过接口(更准确地说,变成模板化的类IMHO),每个子类必须反复定义每个函数;这对于运行时性能很有用。您还可以执行完全由纯虚函数组成的抽象基类;这确实在很多方面都是一个界面;除了你还承担了虚拟功能查找的所有费用之外,有些人不喜欢这样。

你可以双向争论,直到奶牛回家......人们在这些东西上写了详尽的论文。

最后,我认为你对于什么是INTERFACE是字面意义上的Java。虽然标题中通常没有具体的东西,但字面意思是"我是一个界面"它常常存在,可以从头部收集和发现。

它也是一个值得注意的界面,因为通过标题和共享对象,您可以知道如何使用'这些类并在没有源代码的情况下编译它们。再说一遍,它是一个界面;并不总是像#34;纯粹的"就像你在java中看到的一样。