Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
1

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

21.09.2013, 09:14. Просмотров 1369. Ответов 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);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2013, 09:14
Ответы с готовыми решениями:

Вызов методов базового и производного классов
Народ, объясните тупому механику раннего связывания. Вывод программы, что ниже, 22. Хотя если...

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp,...

Вызов объектом базового класса функцию из производного класса!
Как можно осуществить вызов или передачу значения в базовый класс для дальнейшего вычисления этого...

Вызов виртуального метода базового класса из указателя производного
Допустим есть такой код: #include <iostream> class Base { public: virtual void f() {...

13
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,170
Записей в блоге: 2
21.09.2013, 09:20 2
Цитата Сообщение от nexen Посмотреть сообщение
Вызов методов производного класса из базового
Базовые классы не знают о своих потомках
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
21.09.2013, 09:31  [ТС] 3
Croessmah, это то понятно. Но всё же авось есть какой-то способ извратиться.
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
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;
}
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.09.2013, 10:50 5
Цитата Сообщение от nexen Посмотреть сообщение
Croessmah, это то понятно. Но всё же авось есть какой-то способ извратиться.
Почему же извратиться? Есть даже паттерн "шаблонный метод" например.
1
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,170
Записей в блоге: 2
21.09.2013, 11:22 6
Цитата Сообщение от Fyret Посмотреть сообщение
Есть, "виртуальные функции" называется:
и каким образом они помогут вызвать функцию член производного класса из базового класса?
1
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
21.09.2013, 11:27 7
Цитата Сообщение от Croessmah Посмотреть сообщение
и каким образом они помогут вызвать функцию член производного класса из базового класса?
Никаким, оно и не требуется. Посмотрите внимательно, чего хочет ТС.
1
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,170
Записей в блоге: 2
21.09.2013, 11:28 8
Вижу:
Вызов методов производного класса из базового
1
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
21.09.2013, 11:30 9
Цитата Сообщение от Croessmah Посмотреть сообщение
Вижу:
и ниже код, поясняющий эту неудачную формулировку.
1
Croessmah
21.09.2013, 11:32
  #10

Не по теме:

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

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

Если действительно надо просто вызвать из базового класса метод производного, то никак, смотри пост №2.
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
21.09.2013, 11:56  [ТС] 13
Fyret, ну так B.f1(), а оттуда в A::f1(), а там уже и вопрос о том, что нужно из A::f1() вызвать B::f2(), а не A::f2()
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
21.09.2013, 12:08 14
Цитата Сообщение от nexen Посмотреть сообщение
а там уже и вопрос о том, что нужно из A::f1() вызвать B::f2(), а не A::f2()
Если из A::f1() всегда-всегда, независимо ни от чего, вызывать B::f2(), то никак. А если вызвано из B, то виртуальные функции.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2013, 12:08

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

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

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

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

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом чтоб его...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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