类内部C++方法的定义,如Java
Definition of C++ methods inside the class like Java
我是Java程序员,刚接触C++编程。在java中,我们必须将所有类写在单独的文件中,并且所有方法的定义都在类中。但现在在C++中,我想知道为什么C++允许程序员在类之外编写方法的定义。有没有办法编写像Java这样的C++程序?
如果愿意,可以在头文件中为类编写代码。这使得C++中的头文件类似于java中的java文件。
MyClass.h
#ifndef _MYCLASS_H_
#define _MYCLASS_H_
#include "OtherClass.h"
class MyClass {
public:
MyClass() { _otherClass=0; }
void set(OtherClass* oc) { _otherClass = oc; );
OtherClass* get(void) { return _otherClass; };
private:
OtherClass* _otherClass;
};
#endif
但是您也可以在C++中将头和代码拆分为两个文件。这允许您分离方法的定义和声明,并减少编译时标头的依赖关系。
请注意,在上面的示例中,任何包含MyClass.h的类都将自动包含OtherClass.h,无论是否需要,对OtherClass.h的更改都需要重新编译MyClass.h所有客户端。
然而,在下面的分离示例中,存在OtherClass.h的正向声明(这是可能的,因为它仅用作指针(,而实际的OtherClass.h仅包含在cpp文件中。现在,对OtherClass.h的更改将只强制重新编译MyClass.cpp,而不是MyClass.h的客户端(除非它们还包括OtherClass.h(,
这也意味着你可以对MyClass::get((进行更改,你只需要重新编译MyClass.cpp,而不是MyClass 的所有客户端
MyClass.h
#ifndef _MYCLASS_H_
#define _MYCLASS_H_
class OtherClass;
class MyClass {
public:
MyClass();
void set(OtherClass* oc);
OtherClass* get(void);
private:
OtherClass* _otherClass;
};
#endif
MyClass.cpp
#include "MyClass.h"
#include "OtherClass.h"
MyClass::MyClass() : _otherClass(0) {}
MyClass::set(OtherClass* oc) { _otherClass=oc; }
OtherClass* MyClass::get() { return _otherClass; };
但现在在C++中,我想知道为什么C++允许程序员在类之外编写方法的定义。
两个主要原因是编译时间和将实现与接口分离。这在in C++中有更详细的介绍,为什么有头文件和cpp文件?
有没有办法编写像Java这样的C++程序?
可以在头文件中编写整个实现,但不应该。当用任何语言编写代码时,您应该遵循该语言的习语,因为这样更容易阅读和维护。
- Java(或C++)如何处理接口中定义的方法的调用
- 将自定义 Java 数据模型传递给我的本机代码
- JNI:返回用户定义的Java类时要使用什么签名
- 后缀自赋值行为在 C#/Java 中是否严格定义
- 如何从 JAVA 程序中访问文件中定义的类.DLL方法
- 运行自定义调试器 JAVA
- Java 类型的枚举,C++中的自定义值和构造函数
- 在hadoop 2.7.4的自定义排序类中调用C函数,给出Java.lang.unsatisfiedlinkerror
- 使用自定义图形层运行专有[Java]应用程序
- 从Java到C++:如何在另一个自定义类中使用一个自定义类名var
- Kurento自定义插件:如何将事件异步发送到java服务器
- Java:编写自定义视频编解码器的指南
- 如何以定义良好的线程安全方式将C++字符串传递给Java JNI
- 其中是在C++、C和java中定义的默认基元
- 在c++中是否有可能像java中允许的那样,在分配过程中给出类的定义?
- c++和Java数组声明/定义:差异
- c++提倡类定义和类实现之间的分离,但JAVA没有
- Android:如何将自定义对象的数组列表传递给c++代码,并使用JNI在Java代码中获得这些对象的操纵数组列表
- Java是否像c++一样有未定义的行为?
- 在c++和Java之间共享定义或枚举