Перегруженные конструкторы?

186
04 января 2018, 23:41

В заголовочном файле:

#include "Client.h"
class EthernetClient : public Client {
public:
  EthernetClient();
  EthernetClient(uint8_t sock);
private:
  uint8_t _sock;
};

Реализация:

EthernetClient::EthernetClient() : _sock(MAX_SOCK_NUM) { }
EthernetClient::EthernetClient(uint8_t sock) : _sock(sock) { }

MAX_SOCK_NUM дефайн, определенный где-то ранее. Собственно не понятно, что значат эти строки:

EthernetClient::EthernetClient() : _sock(MAX_SOCK_NUM) { }
EthernetClient::EthernetClient(uint8_t sock) : _sock(sock) { }
Answer 1

Да, это перегруженные конструкторы. Первый конструктор без параметров, а второй принимает скорее всего кол-во сокетов. Но так как кол-во сокетов нужно самому классу, в первом случае он инициализирует заведомо заготовленной константой. В целом - обычный код.

Answer 2

Такие перегруженные конструкторы — обычное дело. Другой вопрос в том, что часто это приводит к дублированию кода. Поэтому в данном случае можно было бы обойтись одним единственным с параметром по умолчанию:

EthernetClient(uint8_t sock = MAX_SOCK_NUM) : _sock(sock) { }

В более сложных случаях, начиная с c++11 можно выполнять делегирование конструкторов (вызов одного из другого):

EthernetClient() : EthernetClient(MAX_SOCK_NUM) { }

Делегирование позволяет избежать необходимости выноса общего кода в некую init-функцию.

Подробнее про инициализатор конструктора можно почитать тут: Двоеточие в определении конструктора

READ ALSO
Задача для прокачки мозгов (IQ) [требует правки]

Задача для прокачки мозгов (IQ) [требует правки]

Имеется массив с положительными элементами (N элементов)Районном называется отрезок (l, r) (использовать нужно K районов, ни меньше ни больше),...

225
Изменение значение индекса в map

Изменение значение индекса в map

Как поменять значение индекса в mapС обычным значением понятно, обращаться через индекс

229