Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для [WRG]
53 / 53 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1

Как вызвать функцию родительского класса?

06.02.2014, 10:33. Показов 1979. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
 
using namespace std;
 
class foo{
    void somefunc();
public:
    int i;
};
 
class bar{
    foo fooobj;
public:
    int j;
    void myfunc();
};
 
int main()
{
    bar myobj;
    return 0;
}
 
 
void foo::somefunc()
{
    // вызвать myfunc из bar
}
Мне нужно как-то передать указатель на bar в foo?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2014, 10:33
Ответы с готовыми решениями:

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса?
Ну то есть так: есть родительский и дочерний класс, в родительском определен виртуальная функция и вызывается в его конструкторе (камень...

Как вызвать метод родительского класса;
Собственно вопрос; Есть класс a и b; Класс b унаследован от класса a; И как теперь из класса b вызвать функцию класса a;

Как вызвать функцию из абстрактного класса?
Здравствуйте. Как мне вызвать функцию input с помощью указателя из класса People? При этом не инициализировать переменные в main? ...

16
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
06.02.2014, 10:52
C++
1
2
3
4
void foo::somefunc(bar &obj) //bar *obj
{
obj.somefunc();//obj->somefunc();
}
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,868
06.02.2014, 10:57
Цитата Сообщение от [WRG] Посмотреть сообщение
Как вызвать функцию родительского класса
ткни пальцем где у тебя родительский класс, а где дочерний?
0
 Аватар для [WRG]
53 / 53 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:00  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
ткни пальцем где у тебя родительский класс, а где дочерний?
Наверно, я неправильно выразился, тут ничего не наследуется. Я имел в виду то, что в листинге)
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,868
06.02.2014, 11:05
тогда зачем тебе передавать
Цитата Сообщение от [WRG] Посмотреть сообщение
Мне нужно как-то передать указатель на bar в foo?
foo у тебя член класса
немножко утрирую твой вопрос
как мне передать в int указатель на bar?( смешно?)
пересмотри иерархию
1
 Аватар для [WRG]
53 / 53 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:06  [ТС]
Цитата Сообщение от dzrkot Посмотреть сообщение
C++
1
2
3
4
void foo::somefunc(bar &obj) //bar *obj
{
obj.somefunc();//obj->somefunc();
}
Тогда в каком порядке должны описываться оба класса? Если попробовать собрать мой код выше с вашими изменениями, будет это
C++
1
2
3
main.cpp:6:19: error: ‘bar’ has not been declared
main.cpp:25:6: error: prototype forvoid foo::somefunc(bar&)’ does not match any in class ‘foo’
main.cpp:6:10: error: candidate is: void foo::somefunc(int&)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.02.2014, 11:15
Возможно ТС имеет в виду не наследование классов как таковых, говоря про родителя, а отношение между объектами (см. паттерн компоновщик)

Цитата Сообщение от [WRG] Посмотреть сообщение
‘bar’ has not been declared
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
class bar;
 
class foo{
    void somefunc( bar& b );
public:
    int i;
};
 
class bar{
    foo fooobj;
public:
    int j;
    void myfunc()
    {
    }
};
 
int main()
{
    bar myobj;
    return 0;
}
 
 
void foo::somefunc( bar& b )
{
    // вызвать myfunc из bar
    b.myfunc();
}
1
 Аватар для [WRG]
53 / 53 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:19  [ТС]
Цитата Сообщение от [WRG] Посмотреть сообщение
Тогда в каком порядке должны описываться оба класса? Если попробовать собрать мой код выше с вашими изменениями, будет это
C++
1
2
3
main.cpp:6:19: error: ‘bar’ has not been declared
main.cpp:25:6: error: prototype forvoid foo::somefunc(bar&)’ does not match any in class ‘foo’
main.cpp:6:10: error: candidate is: void foo::somefunc(int&)
Да уж, я сегодня чего то туплю конкретно. У меня получается следующая конструкция, класс bar описывает некий прибор, а класс foo некий датчик в этом приборе, поэтому логично, что он являтся членом класса прибора. Я бы хотел запустить в классе датчика, т.е. foo, метод, который будет в цикле считывать показания с датчика, и если они превысят некий порог, надо дернуть соответствующий метод у прибора (bar). Вот это я имел в виду.

Добавлено через 2 минуты
Tulosba, не знал, что так можно)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.02.2014, 11:20
Цитата Сообщение от [WRG] Посмотреть сообщение
класс bar описывает некий прибор, а класс foo некий датчик в этом приборе
Внутри прибора создаете экземпляр датчика (например через new), а в конструктор датчика передаете this (т.е. указатель на прибор). В датчике реализуете поле типа "указатель на прибор", которое инициализируется ранее переданным this.
1
 Аватар для [WRG]
53 / 53 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:24  [ТС]
Tulosba, вот именно это я и имел в виду, спасибо)
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,868
06.02.2014, 11:26
Цитата Сообщение от [WRG] Посмотреть сообщение
Я бы хотел запустить в классе датчика, т.е. foo, метод, который будет в цикле считывать показания с датчика, и если они превысят некий порог, надо дернуть соответствующий метод у прибора (bar). Вот это я имел в виду.
так, что то начинает прояснятся
под что пишешь
если под винду можно вызвать сообщения SendMessage PostMessage
если Qt то есть сигналы/ слоты
для микроконтроллеров есть прерывания
ну а в общем случае
могу предложить такую схемку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class bar;
class foo
{
.......
bar* parent;
foo(bar* prnt){parent=prnt};
 
fnc(){ parent->func()};
}
 
class bar
{
foo* f1;
bar(){ f1=new foo(this)};

члену класса в конструкторе передается ссылка на объект класса

}
0
 Аватар для [WRG]
53 / 53 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:58  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
так, что то начинает прояснятся
под что пишешь
если под винду можно вызвать сообщения SendMessage PostMessage
если Qt то есть сигналы/ слоты
для микроконтроллеров есть прерывания
ну а в общем случае
могу предложить такую схемку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class bar;
class foo
{
.......
bar* parent;
foo(bar* prnt){parent=prnt};
 
fnc(){ parent->func()};
}
 
class bar
{
foo* f1;
bar(){ f1=new foo(this)};

члену класса в конструкторе передается ссылка на объект класса

}
я так и сделаю, выполняться будет на мкироконтроллере.
Для микроконтроллеров вы имеете в виду прерывания по таймеру? Если так, то наверно имеет смысл вызывать некую функцию, которая будет контролировать датчик, а в случае чего дернет и метод класса прибора. Тогда можно обойтись и без класса датчика. Может, так даже рациональнее будет, т.к. между вызовами этой функции можно еще что-то в фоне делать.
Просто в этот раз охота попробовать такой вариант, если не устроит, могу на прерывание потом повесить.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,868
06.02.2014, 12:06
Цитата Сообщение от [WRG] Посмотреть сообщение
Для микроконтроллеров вы имеете в виду прерывания по таймеру?
не обязательно
есть еще и внешние прерывания, прерывания от USART, да много чего, от модели зависит
камень то какой?

Цитата Сообщение от [WRG] Посмотреть сообщение
Тогда можно обойтись и без класса датчика.
можно в классе bar в цикле( по таймеру) опрашивать датчик
хотя я лично классы для микроконтроллеров не программировал
чистым Си обхожусь, как то пока хватает
0
 Аватар для [WRG]
53 / 53 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 12:14  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
не обязательно
есть еще и внешние прерывания, прерывания от USART, да много чего, от модели зависит
камень то какой?


можно в классе bar в цикле( по таймеру) опрашивать датчик
хотя я лично классы для микроконтроллеров не программировал
чистым Си обхожусь, как то пока хватает
это ATMega2560. Сам первый раз пробую ООП на мк, ибо памяти достаточно. Могу сказать сразу, что скомпилированный ооп код занимает существенно больше места во флеше, чем код без классов. На внешних прерываниях у меня другие датчики висят, эти я знаю как работают. С циклом с таймером тоже знаком, пользуюсь.

зато код структирированный и понятный, тоже самое без ооп у меня какая-то лапша получалась, даже терялся в нём.
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
06.02.2014, 12:32
Цитата Сообщение от [WRG] Посмотреть сообщение
зато код структирированный и понятный, тоже самое без ооп у меня какая-то лапша получалась, даже терялся в нём.
Цитата Сообщение от ValeryS Посмотреть сообщение
Я бы хотел запустить в классе датчика, т.е. foo, метод, который будет в цикле считывать показания с датчика, и если они превысят некий порог, надо дернуть соответствующий метод у прибора (bar). Вот это я имел в виду.
напишите функцию опроса датчика, напишите в обработчике прерываний по таймеру эту функцию, ну и соответственно бит порога этого дачика, потом в switch или по if дегайте чем хотите) это будет намного лучше
0
06.02.2014, 12:35

Не по теме:

dzrkot,
а чей ты мне чужую цитату приписал:(

0
06.02.2014, 12:39

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
Не по теме:
dzrkot,
а чей ты мне чужую цитату приписал
ой, сдучайно))

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2014, 12:39
Помогаю со студенческими работами здесь

Как создать указатель на функцию-член класса и вызвать его?
Подскажите как правильно сделать, а в дальнейшем вызвать указатель на функцию член класса: #include &quot;stdafx.h&quot; #include...

Как вызвать функцию-член правильно для класса Person
Задача простая, ввести фамилию и имя и вывести их. Подскажите, как правильно написать функцию вывода print(). Если один параметр...

Вызвать функцию класса без создания объекта
Можно ли так сделать? Точнее я знаю что можно, но у меня не получается, я хочу чтобы вот например вот это работало Vector2.Distance() где...

Предварительное объявление классов. Вызвать функцию до реализации класса
Приветствую, народ. Пытаюсь реализовать структуру типа патерна &quot;Посредник&quot;. И при реализации взаимодействий возникла проблемка. ...

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в теме теории ООП, так как он кажется мне...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru