Файл реализации (. cpp) для класса с инициализацией члена - PullRequest
0 голосов
/ 29 апреля 2020

Мой вопрос должен быть простым, но я не могу найти правильный способ разбить конструктор с инициализированными членами на .h и. cpp (определение и реализация), файлы.

Если, скажем, я have:

    class Class {

    public: 
    Class (int num, float fl ... ) : _num(num), _fl(fl) {}
    ...

    private:
    int _num;
    float _fl;

    };

Как мне реализовать конструктор в. cpp файле? Если после инициализации члена (в заголовочном файле) я ставлю точку с запятой - компилятор жалуется. Если я сохраню {}, файл. cpp будет переопределять конструктор, что также неверно. Я могу, конечно, записать определение явно. Так что .h файл:

    Class (int num, float fl ... );

и. cpp:

    Class (int num, float fl ... ) {
    _num = num; 
    _fl = fl;
    }

Но есть ли способ сохранить инициализацию члена в заголовочном файле? Заранее спасибо! Кроме того, в профессиональном кодировании, что будет предпочтительнее?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

У вас должны быть члены init и реализация конструкции в. cpp

Class::Class (int num, float fl ... ):_num(num),_fl(fl) 
{
  // whatevever other init task you want to do goes here
}
1 голос
/ 29 апреля 2020

Лучше хранить объявление и определение членов класса отдельно в заголовочных и исходных файлах, если вы не имеете дело с параметрами шаблона. Вы можете сохранить инициализацию элемента отдельно следующим образом.

Заголовочный файл
------------------

class A {
public:
A(int x, float y );

private:
int _x;
float _y;
};

И затем в исходном файле его можно определить как

A::A(int x, float y ) : _x(x), _y(y) {}
...