有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java C++文件头文件如果包含私有成员变量声明,它怎么能被看作类的“接口”呢?

试图在长期Java的java下重新学习C++,我已经{A1} on,而且还模糊地记得,当一个类在一个头文件中声明并在CPP文件中定义时,它将它的接口(H文件)从它的实现(CPP文件)中分离出来。p>

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

例如,一个复数类可以用实变量和虚变量实现,也可以用大小变量和参数变量实现,但它支持相同的getter和setter集合以及您所拥有的东西

分离接口和实现的唯一方法不是从类似于Java的interface的基类继承纯虚拟对象吗


共 (1) 个答案

  1. # 1 楼答案

    文件头和接口是在C++之前长时间构造的。在C语言中这样做的一种常用方法是通过不透明类型。其中一个对象有一个指向某个定义为char**或char[x]的对象的指针,该指针仅表示您的大小,因此您无法看到它。好的例子包括大多数与Sybase和IBM中间件相关的内容。你不能直接“构造”对象,你必须通过它们的工厂方法

    在C++中,这通常是通过piml模式和私有成员实现的。虽然你仍然可以看到一些片段;您仍然可以针对该接口编程。此外,并非每种类型都会向您公开。它不是那么干巴的

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

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

    最后,我要说的是,对于什么是接口,您对Java的理解过于字面化了。虽然在标题中通常没有一个具体的东西字面上说“我是一个接口”,但它经常存在,并且可以从标题中收集和发现

    作为一个接口,它也是值得注意的,因为有了头和共享对象,您就可以知道如何“使用”类并根据它们进行编译,而无需源代码。因此,这也是一个界面;只是并不总是像在java中看到的那样“纯粹”