Абстрактный родитель

  • Автор темы Автор темы Misha111
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
M

Misha111

Есть абстрактный класс (с абстрактными функциями) и его ребенок, где переопределены абстрактные функции родителя.
В общем вроде все просто, но при коде:

[codebox]class A
{
public:
A(void)
{
Open();
}
~A(void)
{
Close();
}
void Open(void)
{
internalOpen();
}
void Close(void)
{
internalClose();
}
protected:
virtual void internalOpen(void) = 0;
virtual void internalClose(void) = 0;
};

class B: public A
{
int x;

protected:
virtual void internalOpen(void)
{
x = 1;
}
virtual void internalClose(void)
{
x = 2;
}
};

B b;[/codebox]

ругается - вызов абстратной функции (internalOpen), но ведь он переопределен в В???
НЕ ПОНИМАЮ!!! Подскажите почему не работает.
 
В конструкторе нельзя вызывать виртуальные методы. Когда создается объект базового класса, порожденный объект еще не инициализирован, так что VMT содержит только методы текущего типа.
 
Спасибо.
Как я понял тоже самое произойдет и в деструкторе.
Довольно долго пришлось прг на Delphi. Сейчас перешел на C++.
В Delphi такое проходит и очень удобно использовать.
И на сколько я понял, в конструкторе и диструкторе родителя будут вызываться только его функции.
Механизм virtual на проходит, а жаль.
 
В Delphi такое проходит и очень удобно использовать.
Зачем городить такой забор с конструктором/деструктором? Вы можете их спокойно переопределить и без защищенных абстрактных функций
 
Я вообще не понял смысла этого творения.
 
Смысл этого творения - предоставление классам-наследникам интерфейса инициализации, который необходимо реализовать. Только вот конструкор сам может выполнять такую роль. Кроме того, возможно использование идиомы двухфазного конструктора (т.е. через отдельный метод Initialize)

Вот, кстати, есть ссылка: http://ru.wikipedia.org/wiki/Конструктор_(программирование)
 
Точно! Что-то я сразу не уловил мысль.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab