[英]Definition of C++ methods inside the class like Java
我是Java程序員,我是C ++編程的新手。 在java中,我們必須在單獨的文件中編寫所有類,並且所有方法的定義都在類中。 但是現在在C ++中,我想知道為什么C ++允許程序員在類之外編寫方法的定義。 有沒有辦法編寫像Java這樣的C ++程序?
如果您願意,可以在頭文件中編寫類的代碼。 這使得C ++中的頭文件類似於java中的java文件。
#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的所有客戶端。
#ifndef _MYCLASS_H_
#define _MYCLASS_H_
class OtherClass;
class MyClass {
public:
MyClass();
void set(OtherClass* oc);
OtherClass* get(void);
private:
OtherClass* _otherClass;
};
#endif
#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.