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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

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

21.09.2013, 09:14. Просмотров 691. Ответов 13
Метки нет (Все метки)

Возможно ли, чтобы
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++
Народ, объясните тупому механику раннего связывания. Вывод программы, что ниже, 22. Хотя если вызывать непосредственно функцию f, будет...

Вызов методов производного класса - C++
Возникла проблема с выполнением задачи. программа запускается, работает, но почему-то не выводит метод scan и print наследовательного...

Вызов наследуемых методов из базового класса - C++
Всем доброго времени суток, перейду сразу к сути. Код: class Base { protected: public: virtual void...

Вызов переопределенного метода из методов базового класса - C++
Здравствуйте, у меня есть два класса, базовый и производный. В производном классе я переопределяю два метода method1 и method2. В базовом...

Конструкторы базового и производного класса - C++
class first { public: first(int a):first(a){} void Setfirst(int a){first=a;} int Getfirst(){return first;} private: ...

Объекты производного класса не наследуют методы базового - C++
Доброго всем дня! Вот такая у меня проблема возникла - объекты производного класса свободно вычитаются, но почему-то не складываются,...

Как узнать тип производного класса в функции базового - C++
Всем привет! Есть иерархия классов: class1 -> class2->class3 class2->class4 class2->class5 Где...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.09.2013, 10:50     Вызов методов производного класса из базового #5
Цитата Сообщение от nexen Посмотреть сообщение
Croessmah, это то понятно. Но всё же авось есть какой-то способ извратиться.
Почему же извратиться? Есть даже паттерн "шаблонный метод" например.
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 1
21.09.2013, 11:22     Вызов методов производного класса из базового #6
Цитата Сообщение от Fyret Посмотреть сообщение
Есть, "виртуальные функции" называется:
и каким образом они помогут вызвать функцию член производного класса из базового класса?
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 11:27     Вызов методов производного класса из базового #7
Цитата Сообщение от Croessmah Посмотреть сообщение
и каким образом они помогут вызвать функцию член производного класса из базового класса?
Никаким, оно и не требуется. Посмотрите внимательно, чего хочет ТС.
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 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++
Можно ли из базового класса обратится к виртуальному методу производного? И если да то как (на примере класса A). Polym.cpp #include...

Наследование: почему вызывается метод базового класса, а не производного? - C++
Всем привет, такой вопрос, почему вызывается в данном коде метод базового класса, а не производного (без указания ключевого слова virtual...

Запрещение перегрузки public методов базового класса - C++
Можно ли запретить наследникам перегружать public методы базового класса? Если да то как? class base { public: void...

Вызов перегрузки базового класса - 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     Вызов методов производного класса из базового
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru