C++ 应该是C++;删除头文件?

C++ 应该是C++;删除头文件?,c++,header-files,C++,Header Files,许多语言,如Java、C#,都没有将声明与实现分开。C#有一个分部类的概念,但实现和声明仍然保留在同一个文件中 为什么C++不具有相同的模型?有头文件更实用吗 我指的是C++标准的当前版本和即将到来的版本。p> 向后兼容性-头文件不会被删除,因为它会破坏向后兼容性。头文件允许独立编译。编译文件不需要访问甚至不需要实现文件。这可以简化分布式构建 这也使得SDK的实现更加容易。您可以只提供标题和一些库。当然,其他语言使用的方法也有很多种。我经常在C和C++之间翻转,而C语言中缺少头文件是我最大的缺点

许多语言,如Java、C#,都没有将声明与实现分开。C#有一个分部类的概念,但实现和声明仍然保留在同一个文件中

为什么C++不具有相同的模型?有头文件更实用吗


我指的是C++标准的当前版本和即将到来的版本。p> 向后兼容性-头文件不会被删除,因为它会破坏向后兼容性。

头文件允许独立编译。编译文件不需要访问甚至不需要实现文件。这可以简化分布式构建

这也使得SDK的实现更加容易。您可以只提供标题和一些库。当然,其他语言使用的方法也有很多种。

我经常在C和C++之间翻转,而C语言中缺少头文件是我最大的缺点。我可以查看头文件,了解有关类的所有我需要知道的信息—调用它的成员函数、它们的调用语法等—而无需费力阅读实现该类的代码页

是的,我知道部分类和#区域,但这不一样。部分类实际上使问题变得更糟,因为类定义分布在多个文件中。就#地区而言,它们似乎从未以我目前所做的方式进行扩展,因此我必须花时间扩展这些小优点,直到我获得正确的观点


<> P>也许VisualStudio的智能感知对C++工作的效果更好,我不会有必要去引用.h文件,但是即使在VS2008,C++的智能感知也不能触摸C的

C,这样就可以很容易地编写编译器。它基于这一原则做了很多事情。指针的存在只是为了使编写编译器更容易,头文件也是如此。许多被移植到C++的东西都是基于与这些特性的兼容性,使编译器编写更加容易。 实际上这是个好主意。创建C时,C和Unix是一对。C移植Unix,Unix运行C。通过这种方式,C和Unix可以在平台之间快速传播,而基于汇编的操作系统必须完全重写才能移植

在一个文件中指定接口并在另一个文件中指定实现的概念一点也不坏,但这不是C头文件的概念。它们只是一种限制编译器通过源代码的次数的方法,并允许对文件之间的契约进行有限的抽象,以便它们可以通信

这些项、指针、头文件等。。。与其他系统相比,不要提供任何优势。通过在编译器中投入更多的精力,您可以像编译指向完全相同的对象代码的指针一样轻松地编译引用对象。这就是C++现在所做的。 C语言是一种伟大而简单的语言。它有一个非常有限的功能集,您可以编写一个编译器,而无需付出太多的努力。移植它通常是微不足道的!我并不是想说它是一种糟糕的语言或其他什么,只是C语言在创建时的主要目标可能会在语言中留下一些现在或多或少不必要的残余,但为了兼容性会保留下来


似乎有些人并不真的相信C是写在端口Unix上的,所以这里:()

UNIX的第一个版本已经编写完成 用汇编语言,但汤普森的 其目的是要将其写下来 用高级语言

汤普森在1971年首次尝试使用 在PDP-7上使用Fortran,但放弃了 第一天之后。然后他写了一封信 他称之为B的非常简单的语言, 这是他在PDP-7上得到的。信息技术 成功了,但也有问题。 首先,因为实施过程非常复杂 但是,它永远都是 慢点。第二,B的基本概念, 这是基于单词导向的 BCPL,只是我们不适合 面向字节的机器,比如新的 PDP-11

里奇使用PDP-11添加类型 到B,有一段时间被称为NB 为了“新B”,然后他开始 为它编写一个编译器。“因此 C的第一阶段实际上是这两个阶段 短时间连续的阶段,首先, 有些语言从B变了,真的, 添加类型结构时不需要太多 语法上有很大的变化;以及 “编译器,”里奇说

“第二阶段比较慢,”他说 在C.Thompson中重写UNIX的方法 开始于1972年夏天,但 两个问题:找出如何运行 基本的联合例程,即如何 将控制从一个进程切换到另一个进程 另一个以及获得的困难 正确的数据结构,因为 C的原始版本没有 结构

“这些事情的结合导致了 肯在这个夏天放弃,” 里奇说。“一年来,我补充道 结构,并可能使 编译代码稍微好一点-- 更好的代码——接下来的几年也是如此 summer,那是我们制作 齐心协力,确实重做了 整个操作系统都是用C语言编写的。”


这里有一个完美的例子来说明我的意思。从评论中:


指针的存在只是为了使编写编译器更容易?不。指针之所以存在,是因为它们是对间接概念最简单的抽象亚当·罗森菲尔德(一小时前)

你说得对。为了实现间接寻址,指针是可能实现的最简单抽象。它们决不是最容易理解或使用的。数组要容易得多

问题出在哪里?要像指针一样高效地实现数组,您必须向编译器中添加大量代码

他们没有理由在没有指针的情况下不能设计C,但是有这样的代码:

int i=0;
while(src[++i])
    dest[i]=src[i];
这将需要(在编译器上)很大的努力
while(*(dest++) = *(src++))
    ;
/* File ClassA.cpp */

#ifndef _ClassA_
#define _ClassA_

#include "ClassB.cpp"
#include "InterfaceC.cpp"

class ClassA : public InterfaceC
{
public:
    ClassA(void);
    virtual ~ClassA(void);

    virtual void methodC();

private:
    ClassB b;
};

#endif

#ifdef compiling_ClassA

ClassA::ClassA(void)
{
}

ClassA::~ClassA(void)
{
}

void ClassA::methodC()
{
}

#endif
-D compiling_ClassA
#include "ClassA.cpp"
extern int my_library_entry_point(int api_to_use, ...);
int private_function_that_CANNOT_be_public();

int my_library_entry_point(int api_to_use, ...){
  // [...] Do stuff
}

int private_function_that_CANNOT_be_public() {

}