Форум программистов, компьютерный форум CyberForum.ru

Вызов методов производного класса из базового - C++

Восстановить пароль Регистрация
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
21.09.2013, 09:14     Вызов методов производного класса из базового #1
Возможно ли, чтобы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class A
{
void f1() 
{
f2();//если вызвано из B, то вызывается B::f2(), а не A::f2()
}
void f2(){}
}
 
class B : public A
{
void f1() 
{
A::f1();
}
void f2(){}
}
 
int main()
{
B b; b.f1();
return (199*199 - 39000 - 20 * 30 - 1);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2013, 09:14     Вызов методов производного класса из базового
Посмотрите здесь:

C++ Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
Вызов виртуального метода базового класса из указателя производного C++
Вызов наследуемых методов из базового класса C++
Конструкторы базового и производного класса C++
C++ Вызов методов производного класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
21.09.2013, 09:20     Вызов методов производного класса из базового #2
Цитата Сообщение от nexen Посмотреть сообщение
Вызов методов производного класса из базового
Базовые классы не знают о своих потомках
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
21.09.2013, 09:31  [ТС]     Вызов методов производного класса из базового #3
Croessmah, это то понятно. Но всё же авось есть какой-то способ извратиться.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 10:29     Вызов методов производного класса из базового #4
Цитата Сообщение от nexen Посмотреть сообщение
Но всё же авось есть какой-то способ извратиться.
Есть, "виртуальные функции" называется:

C++
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
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
class A
{
public:
    void f1() 
    {
        f2();
    }
    
    virtual void f2()
    {
        std::cout << "A::f2()" << std::endl;
    }
};
 
class B : public A
{
public:
    void f1() 
    {
        A::f1();
    }
    
    virtual void f2()
    {
        std::cout << "B::f2()" << std::endl;
    }
};
 
int main()
{
    B b;
    b.f1();
    
    return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.09.2013, 10:50     Вызов методов производного класса из базового #5
Цитата Сообщение от nexen Посмотреть сообщение
Croessmah, это то понятно. Но всё же авось есть какой-то способ извратиться.
Почему же извратиться? Есть даже паттерн "шаблонный метод" например.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
21.09.2013, 11:22     Вызов методов производного класса из базового #6
Цитата Сообщение от Fyret Посмотреть сообщение
Есть, "виртуальные функции" называется:
и каким образом они помогут вызвать функцию член производного класса из базового класса?
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 11:27     Вызов методов производного класса из базового #7
Цитата Сообщение от Croessmah Посмотреть сообщение
и каким образом они помогут вызвать функцию член производного класса из базового класса?
Никаким, оно и не требуется. Посмотрите внимательно, чего хочет ТС.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
21.09.2013, 11:28     Вызов методов производного класса из базового #8
Вижу:
Вызов методов производного класса из базового
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 11:30     Вызов методов производного класса из базового #9
Цитата Сообщение от Croessmah Посмотреть сообщение
Вижу:
и ниже код, поясняющий эту неудачную формулировку.
Croessmah
21.09.2013, 11:32
  #10

Не по теме:

Цитата Сообщение от Fyret Посмотреть сообщение
поясняющий эту неудачную формулировку.
Какой вопрос задан, на тот и отвечаю.

nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
21.09.2013, 11:41  [ТС]     Вызов методов производного класса из базового #11
Fyret, требуется. В названии темы был же вопрос, да и в коде тоже.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 11:51     Вызов методов производного класса из базового #12
Цитата Сообщение от nexen Посмотреть сообщение
В названии темы был же вопрос, да и в коде тоже.
В коде я увидел "если вызвано из B, то..." и "B b; b.f1();". Ну я не компилятор, стараюсь быть человечным.

Если действительно надо просто вызвать из базового класса метод производного, то никак, смотри пост №2.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
21.09.2013, 11:56  [ТС]     Вызов методов производного класса из базового #13
Fyret, ну так B.f1(), а оттуда в A::f1(), а там уже и вопрос о том, что нужно из A::f1() вызвать B::f2(), а не A::f2()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 12:08     Вызов методов производного класса из базового
Еще ссылки по теме:

Можно ли из базового класса обратится к виртуальному методу производного? C++
Указатель на объект базового класса и адрес объекта производного класса C++
Вызов переопределенного метода из методов базового класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 12:08     Вызов методов производного класса из базового #14
Цитата Сообщение от nexen Посмотреть сообщение
а там уже и вопрос о том, что нужно из A::f1() вызвать B::f2(), а не A::f2()
Если из A::f1() всегда-всегда, независимо ни от чего, вызывать B::f2(), то никак. А если вызвано из B, то виртуальные функции.
Yandex
Объявления
21.09.2013, 12:08     Вызов методов производного класса из базового
Ответ Создать тему
Опции темы

Текущее время: 00:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru