Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов метода потомка из базового класса. / 14 сообщений из 14, страница 1 из 1
07.02.2020, 02:28
    #39923712
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
Пусть имеем
Код: plaintext
1.
class A{}

А также
Код: plaintext
1.
2.
3.
4.
class B:A
{
int DoSomething() {}
}


A ничего не знает о существовании B. Нужно периодически вызывать из A метод B::DoSomething(). Каким образом это сделать?
Вроде, это должно делаться через static_cast или dynamic_cast. В экземплах Microsoft это делается в main(), где А и В знают о существовании друг друга.
В инете тоже все экземалы предполагают близкое знакомство А и В. Попытка запихнуть в А #include "B" Вызвало бурю негодования.) Что, в общем, понятно, но ведь попробовать можно.)

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
07.02.2020, 03:24
    #39923718
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
Код: plaintext
1.
2.
3.
class A {
   virtual int DoSomething() {}
}
...
Рейтинг: 0 / 0
07.02.2020, 17:16
    #39923995
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
White Owl
Код: plaintext
1.
2.
3.
class A {
   virtual int DoSomething() {}
}

Это не проходит.
Вызывал и напрямую, и через A::DoSomething(). B::DoSomething() не откликается.
...
Рейтинг: 0 / 0
07.02.2020, 17:30
    #39924003
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
YUBA
White Owl
Код: plaintext
1.
2.
3.
class A {
   virtual int DoSomething() {}
}

Это не проходит.
Вызывал и напрямую, и через A::DoSomething(). B::DoSomething() не откликается.
в смысле "не проходит"? покажи как ты этого достиг, чтобы "не проходило"?
...
Рейтинг: 0 / 0
07.02.2020, 17:41
    #39924007
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
egorych,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class A{
virtual int DoSomething() {return 0;};
int f()
{
// DoSomething();
//или
A::DoSomething();
return 0;
}
}


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class B:A
{
int DoSomething() {
// пишем логфайл
return 0;
}
}

Вот так. Нет логфайла.
...
Рейтинг: 0 / 0
07.02.2020, 17:45
    #39924009
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
YUBAclass B:A
int DoSomething() {

Добавь "override" для надёжности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.02.2020, 18:36
    #39924020
vAH_O6Vg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
YUBA, если переписать код, чтобы он хотя бы компилировался, то всё есть .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    #include <iostream>
     
    class A{
    public:
    virtual int DoSomething() {return 0;}
    int f()
    {
    DoSomething();
    return 0;
    }
    };
     
    class B: public A
    {
    public:
    int DoSomething() {
    std::cout << "Hello World!" << std::endl;
    return 0;
    }
    };
     
    int main() {
    	A* a = new B;
        a->f();
        delete a;
        return 0;
    }
...
Рейтинг: 0 / 0
07.02.2020, 19:04
    #39924029
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
vAH_O6Vg, спасибо. У меня тоже уже работает. Такая конструкция.
Это уже большая, на >200КБ, ДЛЛ, и поначалу где-то недосмотрел.
Всем спасибо!

Интересно, почему в инете аналогичная задача везде решается через static_cast?
...
Рейтинг: 0 / 0
07.02.2020, 19:12
    #39924034
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
YUBA
Интересно, почему в инете аналогичная задача везде решается через static_cast?

Ссылку дай где так решается. Родитель понятия не имеет о наследниках, поэтому не знает к чему приводить static_cast`ом
...
Рейтинг: 0 / 0
07.02.2020, 19:16
    #39924037
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
Dima T
YUBA
Интересно, почему в инете аналогичная задача везде решается через static_cast?

Ссылку дай где так решается. Родитель понятия не имеет о наследниках, поэтому не знает к чему приводить static_cast`ом
Хорошо, позднее поищу. Вчера смотрел.
...
Рейтинг: 0 / 0
07.02.2020, 21:34
    #39924079
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
Dima T
Родитель понятия не имеет о наследниках, поэтому не знает к чему приводить static_cast`ом
может в некоторых случаях это можно определить на момент компиляции?
...
Рейтинг: 0 / 0
07.02.2020, 23:02
    #39924095
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
Dima T
YUBA
Интересно, почему в инете аналогичная задача везде решается через static_cast?

Ссылку дай где так решается. Родитель понятия не имеет о наследниках, поэтому не знает к чему приводить static_cast`ом
В частности, здесь.
C++. Передача указателя на методы потомка в родительский класс
...
Рейтинг: 0 / 0
07.02.2020, 23:20
    #39924098
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
YUBA
....Передача указателя на методы потомка в родительский класс



авторы курили тяжёлые наркотики явно...
крайне НЕ РЕКОМЕНДУЮ делать то, что ПРОТИВОРЕЧИТ ЛЮБОЙ ЗДРАВОЙ ЛОГИКЕ... Иначе потом будете с пеной у рта заявлять на всех форумах о верёвке которая стреляет се в жопу, о самом сложном в программировании - указателях, и крутых знаниях ООА и ООП...

ну а теперь серьёзно...
Нарисуйте хотя бы один случай ИЗ ЖИЗНИ (а ОО это единственная технология которая учит как переложить жизнь в код) когда родитель должен знать о ребёнке???

я вот как то не въезжаю - что двигатель машины знает где стоит? И небось его мозги прошиты на разные варианты - типо в камазе, в легковой, на самолёте и т.д... Или ещё дальше - знает небось маршрут передвижения машины в целом и качестве дорожного полотна? Вы серьёзно????


бу-га-га
(круглый)
...
Рейтинг: 0 / 0
09.02.2020, 10:07
    #39924337
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода потомка из базового класса.
CEMb
Dima T
Родитель понятия не имеет о наследниках, поэтому не знает к чему приводить static_cast`ом
может в некоторых случаях это можно определить на момент компиляции?

Статик диспатчинг можно обеспечить через CRTP, сделав A шаблонным классом.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов метода потомка из базового класса. / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]