Я программист на Java и я новичок в программировании на C ++. В Java мы должны написать все классы в отдельных файлах, и все определения методов находятся прямо внутри класса.
Но теперь, в C ++, мне интересно, почему C ++ позволяет программистам писать определение метода вне класса.
Есть ли способ писать программы на C ++, такие как Java?
Вы можете написать код для ваших классов в заголовочном файле, если хотите. Это делает заголовочный файл в 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 ++ позволяет программистам писать определение метода вне класса.
Двумя основными причинами являются времена компиляции и отделение реализации от интерфейса. Это рассматривается более подробно в В C ++, почему есть заголовочные файлы и файлы cpp?
Есть ли способ писать программы на C ++, такие как Java?
Вы мог напишите всю свою реализацию в заголовочных файлах, но вы не должен. При написании кода в любой язык, вы должны следовать идиомам этого языка, так как это облегчает чтение и обслуживание.