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

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

Войти
Регистрация
Восстановить пароль
 
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
#1

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

06.02.2014, 10:33. Просмотров 757. Ответов 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2014, 10:33     Как вызвать функцию родительского класса?
Посмотрите здесь:

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

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

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

Спрятать указатель на функцию класса в map и вызвать из другого объекта - C++
Товарищи, пишу примитивный &quot;tcp-сервер&quot;. В его задачи входит принятие соединений и получение сообщений. В зависимости от сообщения &quot;сервер&quot;...

Как использовать явный конструктор родительского класса? - C++
Привет :) Вот код, строчка 43. Как использовать конструктор типа A(int), в классе C? Компилятор выдаёт ошибку (Error:...

Как вызвать метод класса? - C++
User.cpp User::User(string name): name(name), price(0), amount(0) { cout &lt;&lt;&quot;User has been create&quot;; } ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
06.02.2014, 10:52     Как вызвать функцию родительского класса? #2
C++
1
2
3
4
void foo::somefunc(bar &obj) //bar *obj
{
obj.somefunc();//obj->somefunc();
}
ValeryS
Модератор
6543 / 5009 / 462
Регистрация: 14.02.2011
Сообщений: 16,656
06.02.2014, 10:57     Как вызвать функцию родительского класса? #3
Цитата Сообщение от [WRG] Посмотреть сообщение
Как вызвать функцию родительского класса
ткни пальцем где у тебя родительский класс, а где дочерний?
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:00  [ТС]     Как вызвать функцию родительского класса? #4
Цитата Сообщение от ValeryS Посмотреть сообщение
ткни пальцем где у тебя родительский класс, а где дочерний?
Наверно, я неправильно выразился, тут ничего не наследуется. Я имел в виду то, что в листинге)
ValeryS
Модератор
6543 / 5009 / 462
Регистрация: 14.02.2011
Сообщений: 16,656
06.02.2014, 11:05     Как вызвать функцию родительского класса? #5
тогда зачем тебе передавать
Цитата Сообщение от [WRG] Посмотреть сообщение
Мне нужно как-то передать указатель на bar в foo?
foo у тебя член класса
немножко утрирую твой вопрос
как мне передать в int указатель на bar?( смешно?)
пересмотри иерархию
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:06  [ТС]     Как вызвать функцию родительского класса? #6
Цитата Сообщение от 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&)
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.02.2014, 11:15     Как вызвать функцию родительского класса? #7
Возможно ТС имеет в виду не наследование классов как таковых, говоря про родителя, а отношение между объектами (см. паттерн компоновщик)

Цитата Сообщение от [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();
}
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:19  [ТС]     Как вызвать функцию родительского класса? #8
Цитата Сообщение от [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, не знал, что так можно)
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.02.2014, 11:20     Как вызвать функцию родительского класса? #9
Цитата Сообщение от [WRG] Посмотреть сообщение
класс bar описывает некий прибор, а класс foo некий датчик в этом приборе
Внутри прибора создаете экземпляр датчика (например через new), а в конструктор датчика передаете this (т.е. указатель на прибор). В датчике реализуете поле типа "указатель на прибор", которое инициализируется ранее переданным this.
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:24  [ТС]     Как вызвать функцию родительского класса? #10
Tulosba, вот именно это я и имел в виду, спасибо)
ValeryS
Модератор
6543 / 5009 / 462
Регистрация: 14.02.2011
Сообщений: 16,656
06.02.2014, 11:26     Как вызвать функцию родительского класса? #11
Цитата Сообщение от [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)};

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

}
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
06.02.2014, 11:58  [ТС]     Как вызвать функцию родительского класса? #12
Цитата Сообщение от 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)};

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

}
я так и сделаю, выполняться будет на мкироконтроллере.
Для микроконтроллеров вы имеете в виду прерывания по таймеру? Если так, то наверно имеет смысл вызывать некую функцию, которая будет контролировать датчик, а в случае чего дернет и метод класса прибора. Тогда можно обойтись и без класса датчика. Может, так даже рациональнее будет, т.к. между вызовами этой функции можно еще что-то в фоне делать.
Просто в этот раз охота попробовать такой вариант, если не устроит, могу на прерывание потом повесить.
ValeryS
Модератор
6543 / 5009 / 462
Регистрация: 14.02.2011
Сообщений: 16,656
06.02.2014, 12:06     Как вызвать функцию родительского класса? #13
Цитата Сообщение от [WRG] Посмотреть сообщение
Для микроконтроллеров вы имеете в виду прерывания по таймеру?
не обязательно
есть еще и внешние прерывания, прерывания от USART, да много чего, от модели зависит
камень то какой?

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


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

зато код структирированный и понятный, тоже самое без ооп у меня какая-то лапша получалась, даже терялся в нём.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
06.02.2014, 12:32     Как вызвать функцию родительского класса? #15
Цитата Сообщение от [WRG] Посмотреть сообщение
зато код структирированный и понятный, тоже самое без ооп у меня какая-то лапша получалась, даже терялся в нём.
Цитата Сообщение от ValeryS Посмотреть сообщение
Я бы хотел запустить в классе датчика, т.е. foo, метод, который будет в цикле считывать показания с датчика, и если они превысят некий порог, надо дернуть соответствующий метод у прибора (bar). Вот это я имел в виду.
напишите функцию опроса датчика, напишите в обработчике прерываний по таймеру эту функцию, ну и соответственно бит порога этого дачика, потом в switch или по if дегайте чем хотите) это будет намного лучше
ValeryS
06.02.2014, 12:35
  #16

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2014, 12:39     Как вызвать функцию родительского класса?
Еще ссылки по теме:

Как вызвать метод одного класса в другом? - C++
У меня есть два отдельных класса. Вопрос, как вызвать метод одного класса в другом? что-то слышал о экземпляре класса, указатели, но так...

Как вызвать оператор базового класса в наследнике? - C++
Всем привет! Имеется такая конструкция (мой вопрос - в комментарии к последнему классу): class A { A(); ~A(); virtual...

Как вызвать функцию? - C++
У меня допустим есть уже готовые функции с именами от а0 до а1000 а мне нужно чтобы прога исходя из входных данных сама высчитала...

Как правильно вызвать функцию? - C++
Добрый день. подскажите как исправить ошибку: TAsync * Async ; Async = new TAsync; ComPort-&gt;...

Как вызвать функцию из .h в main ? - C++
Здравствуйте! Помогите решить проблему. У меня есть много маленьких подзадачек в виде функций, которые расписаны в файлах .h и .cpp....


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

Или воспользуйтесь поиском по форуму:
dzrkot
06.02.2014, 12:39     Как вызвать функцию родительского класса?
  #17

Не по теме:

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

Yandex
Объявления
06.02.2014, 12:39     Как вызвать функцию родительского класса?
Ответ Создать тему
Опции темы

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