3

我是 Java 程序员,我是 C++ 编程的新手。在 java 中,我们必须将所有类编写在单独的文件中,并且所有方法的定义都在类中。但是现在在 C++ 中,我想知道为什么 C++ 允许程序员在类之外编写方法的定义。有没有办法编写像 Java 这样的 C++ 程序?

4

2 回答 2

6

如果您愿意,可以在头文件中为您的类编写代码。这使得 C++ 中的头文件类似于 java 中的 java 文件。

我的类.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 的所有客户端

我的类.h

#ifndef _MYCLASS_H_
#define _MYCLASS_H_

class OtherClass;

class MyClass {
public:
    MyClass();

    void set(OtherClass* oc);
    OtherClass* get(void);

private:
   OtherClass* _otherClass;
};
#endif

我的类.cpp

#include "MyClass.h"
#include "OtherClass.h"

MyClass::MyClass() : _otherClass(0) {}

MyClass::set(OtherClass* oc) { _otherClass=oc; }

OtherClass* MyClass::get() { return _otherClass; };
于 2013-02-24T04:17:42.973 回答
3

但是现在在 C++ 中,我想知道为什么 C++ 允许程序员在类之外编写方法的定义。

两个主要原因是编译时间和将实现与接口分离。这在 C++ 中为什么有头文件和 cpp 文件中有更详细的介绍?

有没有办法编写像 Java 这样的 C++ 程序?

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

于 2013-02-24T04:18:42.520 回答