powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов метода потомка из базового класса.
14 сообщений из 14, страница 1 из 1
Вызов метода потомка из базового класса.
    #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
Вызов метода потомка из базового класса.
    #39923718
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
class A {
   virtual int DoSomething() {}
}
...
Рейтинг: 0 / 0
Вызов метода потомка из базового класса.
    #39923995
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Код: plaintext
1.
2.
3.
class A {
   virtual int DoSomething() {}
}

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

Это не проходит.
Вызывал и напрямую, и через A::DoSomething(). B::DoSomething() не откликается.
в смысле "не проходит"? покажи как ты этого достиг, чтобы "не проходило"?
...
Рейтинг: 0 / 0
Вызов метода потомка из базового класса.
    #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
Вызов метода потомка из базового класса.
    #39924009
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAclass B:A
int DoSomething() {

Добавь "override" для надёжности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов метода потомка из базового класса.
    #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
Вызов метода потомка из базового класса.
    #39924029
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vAH_O6Vg, спасибо. У меня тоже уже работает. Такая конструкция.
Это уже большая, на >200КБ, ДЛЛ, и поначалу где-то недосмотрел.
Всем спасибо!

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

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

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

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



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

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

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


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

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


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