类内部C++方法的定义,如Java

Definition of C++ methods inside the class like Java

本文关键字:Java 定义 内部 C++ 方法      更新时间:2023-10-16

我是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++程序?

可以在头文件中编写整个实现,但不应该。当用任何语言编写代码时,您应该遵循该语言的习语,因为这样更容易阅读和维护。