В настоящее время я пытаюсь достичь чего-то в C ++, что я делаю в Java все время: допустим, у меня есть функция bool init()
в качестве члена моего класса A
, которая вызывается в конструкторе A
иесли он вернет false
, конструктор выдаст исключение.
Теперь я создаю новый класс B
, который наследуется от A
, но ему нужно выполнить другую инициализацию, чтобы он возвратил true
в других случаях, отличных от оригинального A::init()
.
. В Java я бы просто переписал метод в B
, и когда конструктор A
вызывается в процессе построения B
, он вызовет B::init()
из конструктора А. и все работает как чемпион.
В C ++, однако, я только что узнал, что не могу вызывать виртуальные функции в конструкторе (то есть я могу, но это не так)вести себя так же).Мой вопрос сейчас заключается в том, как я могу обрабатывать такие инициализации / проверки, которые вызываются из конструктора, но это может потребоваться изменить в производной класса.
Конечно, можно было бы не вызывать это в конструкторе, нопредоставьте программисту возможность явно вызывать функцию init()
после создания объекта, но мне это не нравится, поскольку об этом можно забыть, что приведет к странному состоянию объекта.
Небольшой пример:
Учтите, что A
и B
читают содержимое жестко закодированного файла.A
читает fileA.txt
и B
читает fileB.txt
.Я хочу, чтобы конструкция объекта прошла успешно только при наличии соответствующего файла.Таким образом, проверка должна происходить в конструкторе объекта.Если запись проверки в конструктор напрямую приведет к сбою B
всегда (при условии, что оба файла не могут существовать одновременно), поэтому я всегда выбирал функцию, которая выполняет проверку и которую можно перезаписать.Что такое C ++ способ сделать это?