Вы можете сделать деструктор чисто виртуальным, и это станет вашей "фиктивной функцией". т.е.
class Bad_Date
{
private:
const char* _my_msg;
public:
const char* msg() const { return _my_msg; }
virtual ~Bad_Date() = 0;
};
В любом случае, сделать виртуальный деструктор хорошей идеей для любого класса, который вы собираетесь использовать полиморфно, чтобы обеспечить надлежащую очистку экземпляров подкласса. Если вам нужно, чтобы Bad_Date выполнял какую-то работу в деструкторе, вы, конечно, не можете сделать деструктор чисто виртуальным. Создание защищенного конструктора (ов) Bad_Date
- еще один жизнеспособный метод. Это гарантирует, что Bad_Date
может быть создан только подклассом Bad_Date
. К сожалению, это не помешает кому-то создать подкласс Bad_Date
, просто чтобы действовать как фабрика для Bad_Date
с.
Кроме того, существуют специальные расширения компилятора для создания абстрактных базовых классов, например, MSVC имеет __interface
, а gcc имеет , раньше имел signature
.