Наследование C ++ - почему моя функция не использовалась? - PullRequest
0 голосов
/ 02 февраля 2011

У меня есть IBase класс с virtual void CastData(){} в нем. там это используется в другой функции.

У меня есть еще один совершенно не связанный класс IC с

virtual void CastData(){
    for (FunctionIterator it(funcs.begin()); it != funcs.end(); ++it){
        DataType dataCopy;
        dataCopy = *dataElement;
        (*it)(dataCopy);
    }
}

Теперь я хочу создать новый класс, в котором CastData из C будет перезаписывать CastData из базового класса.

Так что я пытаюсь что-то вроде класс IGraphElement: публичный IBase, публичный IC

Все функции работают правильно. и все функции IC работают, но IBase CastData не был перезаписан.

Как делать такие типы переопределений, когда виртуальные функции из класса, который вы наследуете, перезаписывают виртуальные функции из другого класса, который вы наследуете?

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Если вы хотите переопределить CastData для всех, то вам может потребоваться абстрагировать интерфейс и сделать так, чтобы IC и IBase происходили из одного и того же интерфейса. Но, как вы указываете, IBase и IC совершенно не связаны между собой, то не следует ожидать, что IGraphElement сможет корректно переопределить CastData в IBase и IC.

1 голос
/ 02 февраля 2011

виртуальные функции должны быть переопределены производным классом, а не другим базовым классом.Возможно, предоставьте переопределение в IGraphElement, который вызывает IC для выполнения работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...