繁体   English   中英

像Java一样在类中定义C ++方法

[英]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 ++程序?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM