簡體   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