Powiel możliwe:
Inline functions in C++Co się stanie, jeśli zaimplementuję klasę w pliku nagłówkowym?
Jaki kompilator zrobić, jeśli całkowicie zaimplementować klasę w jego pliku nagłówka? Typowym przykładem następująco:
class MyException
{
public:
explicit MyException(const char* file, int line) file(file), line(line) {};
const char* getFile() const { return file };
int getLine() const { return line };
private:
const char* const file;
const int line;
};
Moją intencją jest, aby korzystać z klasy tak: throw MyException(__FILE__, __LINE__)
.
Dołączę ten plik nagłówkowy do każdego pliku .cpp. Przypuszczam, że kompilator skompiluje klasę tyle razy, ile jest zdefiniowane i dołącza (identyczny) kod maszynowy do każdego tworzonego pliku obiektu. Co zrobi linker? Próbowałem prostszego przykładu (bez tych wszystkich brzydkich const
) i skompilowałem go dobrze.
Co by się stało, gdyby zamiast prostej klasy zaimplementowałem funkcję C-screen o trzech ekranach w pliku nagłówkowym? I ostatnie pytanie, czy powinienem podzielić mój przykład na pliki .h i .cpp?
Metody zastosowane w definicji klasy są wbudowane. –
Dla krótkiej klasy takiej jak ta nie ma sensu dzielenie jej na .h i .cpp. – alfa
Będzie działał dobrze, o ile nie uwzględnisz wyjątku w 2 bibliotekach i nie wyrzucisz tego execocation przez granice bibliotek w systemie Linux. Środowisko wykonawcze uzna wersję 2 wyjątku za odmienną, a funkcja catch (MyException &) w bibliotece A może nie działać z powodu wyrzucenia wyjątku MyException z biblioteki B – gastush