я в курсе трех различных видов реализации «местах» для моих методов класса:Где я должен реализовать метод класса?
1) Определить метод внутри моего класса (файл .h) и реализовать его в моем файле .cpp
//.h
class Foo
{
int getVal() const;
};
//.cpp
int Foo::getVal() const
{ return 0; }
2) Определите и реализуйте метод внутри моего класса (файл .h).
//.h
class Foo
{
int getVal() const
{ return 0; }
};
3) Определите метод внутри моего класса и реализуйте его вне класса, но внутри моего заголовочного файла.
//.h
class Foo
{
int getVal() const;
};
int Foo::getVal() const
{ return 0; }
В чем основные отличия между этими тремя подходами?
# 3, вероятно, приведет к ошибке компоновщика (как только вы включите этот заголовок в несколько исходных файлов). –
# 2 позволит компилятору встроить функцию там, где это необходимо (без необходимости оптимизации всей программы), поэтому она обычно используется для небольших функций getter/setter, как показано в вашем примере. Для шаблонных классов (только), # 1 не является опцией, а # 2 и # 3 становятся эквивалентными. – Cameron
Для более быстрой скорости компиляции предпочитайте # 1 как можно больше. –