C++成员函数永远不会在"类外"定义.该Class_Name::前缀并将其保存在类中.他们只是不在班级宣言中.
在C++中需要拆分声明和定义,因为单独的编译模型基于文本文件包含.无法从编译的目标文件中提取有关类的详细信息,因此类型信息的精简摘要会被分解到头文件中,并且必须包含该类的所有客户端模块.Java具有更复杂的目标文件格式,这使得可以在没有头文件的情况下获取有关类的信息.
语言中出现的声明的另一个需要是处理函数之间的相互递归或其他形式的循环引用(例如,Wirth的原始Pascal语言中需要它们,它们不支持将程序拆分为单独的模块).Java可以在不需要前向声明的情况下完成相互递归.您只需将类型检查推迟到完整解析.Pascal中的前向声明不是为了使相互递归成为可能,而是为了能够在一次传递中编译它,从而可以在编译下一个函数之前发出一个函数的代码.(当您的硬件于1968年建成时,这很重要.)
如果您使用的语言不需要声明,为什么还要费心寻找将它们放回去的方法呢?就像你被释放后继续吃监狱食物一样.(这可能是"习得无助"的一个例子.)
无论如何,几十年来类型系统的最新技术现在已经被设计尽可能地避免声明并且依赖于类型推断.看看你有多少次用C++编写类名来完成任务.class myclass { public: myclass(); }; myclass::myclass() { /* constructor */ }.四次重复myclass只是为了创建一个什么都不做的虚拟类,使用在类声明之外定义的构造函数.
| 归档时间: |
|
| 查看次数: |
2952 次 |
| 最近记录: |