Я работаю над классом C ++, который предоставляет абстракцию BSD-сокетов для работы в сети. Я хочу определить интерфейс ISocket
, который реализуется с помощью CSocket
и MockSocket
(последний для модульного тестирования). Я знаю, что мне нужно определить методы, которые я хочу реализовать для реализации классов, как чисто виртуальные, т.е.
class ISocket {
public:
virtual int Socket(int domain, int type, int protocol) = 0;
};
Меня беспокоит, может ли быть создан экземпляр класса типа ISocket
. Мои инстинкты говорят мне, что любой класс, по крайней мере с одним чисто виртуальным методом, является абстрактным классом (то есть интерфейсом) и не может быть создан, но в глубине моего сознания я беспокоюсь, что мне нужно что-то сделать с автоматически сгенерированным конструкторы и деструкторы, которые будет предоставлять компилятор C ++ ( Effective C ++ - это и дар - когда вы помните все, что вы читаете в нем, - и проклятие - когда вы этого не делаете).
Правильно ли я делаю это, или есть лучший способ определения интерфейсов в C ++, которому я здесь не следую?