Вызов метода самой последней перегрузки
От: Kingofastellarwar Украина  
Дата: 02.06.15 23:16
Оценка:
как?


class Base;

class A : Base
{
     void virtual Do(){}
}

class B : A
class C : A
class D : A
...
{
     void virtual Do(){}
}

list<Base *> bases;

bases.push_back(new B);
bases.push_back(new C);
bases.push_back(new D);

for(auto i : bases)
{
   dynamic_cast<A *>(i)->Do(); // вызовется метод класса A а нужно В, C, D
}


не хочется пихать метод Do в Base ибо ему там не место
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Вызов метода самой последней перегрузки
От: acDev Россия  
Дата: 03.06.15 02:50
Оценка: +2
Здравствуйте, Kingofastellarwar, Вы писали:

K>не хочется пихать метод Do в Base ибо ему там не место


Странно мыслите. Тут прямо таки напрашивается поместить Do в Base как абстрактный метод.
Re: Вызов метода самой последней перегрузки
От: ArtDenis Россия  
Дата: 03.06.15 04:10
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>как?


Этот пример не должен ни компилироваться ни работать, т.к.
1. Наследование закрытое
2. Динамическое приведение выполняется от класса, не имеющего виртуальных методов

Приведи полный компилируемый пример.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Вызов метода самой последней перегрузки
От: Kingofastellarwar Украина  
Дата: 03.06.15 07:28
Оценка: :)
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, Kingofastellarwar, Вы писали:


K>>как?


AD>Этот пример не должен ни компилироваться ни работать, т.к.

AD>1. Наследование закрытое
AD>2. Динамическое приведение выполняется от класса, не имеющего виртуальных методов

AD>Приведи полный компилируемый пример.


ну он там чуть сложнее, но я разрулил уже, оказалось тупо сигнатуры немного отличались, в одном передавалось по значению а в перегруженном по ссылке, в итоге все компилируется а перегрузки не выполняется

пасиба посоны
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Вызов метода самой последней перегрузки
От: ArtDenis Россия  
Дата: 03.06.15 07:33
Оценка: +2
Здравствуйте, Kingofastellarwar, Вы писали:

K>ну он там чуть сложнее, но я разрулил уже, оказалось тупо сигнатуры немного отличались, в одном передавалось по значению а в перегруженном по ссылке, в итоге все компилируется а перегрузки не выполняется


Чтобы такого не случалось, придумали ключевое слово override
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Вызов метода самой последней перегрузки
От: johny5 Новая Зеландия
Дата: 10.06.15 01:36
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, Kingofastellarwar, Вы писали:


K>>ну он там чуть сложнее, но я разрулил уже, оказалось тупо сигнатуры немного отличались, в одном передавалось по значению а в перегруженном по ссылке, в итоге все компилируется а перегрузки не выполняется


AD>Чтобы такого не случалось, придумали ключевое слово override


Или /we4263. Eсли override недоступен.
Отредактировано 10.06.2015 1:38 johny5 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.