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

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

Войти
Регистрация
Восстановить пароль
 
Korbofos
4 / 4 / 0
Регистрация: 15.08.2011
Сообщений: 154
#1

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

30.01.2012, 03:01. Просмотров 590. Ответов 8
Метки нет (Все метки)

Помогите школнегу
Имеется несколько классов
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
class Com
{
protected:
unsigned char bufrd[BUFSIZE], bufwr[BUFSIZE];
unsigned char tx_index, rx_index;
public:
void open();
void close();
void write(unsigned char data);
void send();
unsigned char read();
};
 
class Robo
{
protected:
unsigned char l_centr, r_centr, left, right, sensor_data;
public:
void radar_read(unsigned int pos, unsigned int adc);
void radar_write();
void read_sensor(unsigned char data);
void calc ();
void speed();
void synchronization ();
};
Теперь например из класса Robo нужно обратится к Com функции-члену write, из main тоже нужно обратится к write
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
Robo rob;
Com cob;
cob.write(6);
rob.radar_write();
return 0;
}
 
Robo::radar_write()
{
Com cob;
cob.write(10);
}
надо создавать объект класса Com в radar_write если он уже создан в main? Или правельние вызвать так
Robo::radar_write()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 03:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов метода класса из метода другого класса (C++):

Передача метода класса в качестве параметра для метода другого класса - C++
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна...

Вызов метода другого класса - C++
#include<iostream> using namespace std; class A { public: void Show() { cout << "A" << endl; }; }; class B { ...

Вызов статического метода из другого класса - C++
Добрый день. Есть MAIN.cpp: STDMETHODIMP CMAIN::Function1(VARIANT Data,BYTE* pBuff) { .......... return x; } И...

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

Ошибка при вызове метода класса в методе другого класса - C++
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса выходит такая ошибка " нестандартный...

Вызов динамического метода класса по указателю на объект класса - C++
Как это можно сделать? И хотелось бы как можно проще.

8
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
30.01.2012, 03:25 #2
Цитата Сообщение от Korbofos Посмотреть сообщение
надо создавать объект класса Com в radar_write если он уже создан в main? Или правельние вызвать так
Robo::radar_write()?
да, надо. если есть необходимость использовать значения из main в radar_write, то правильнее будет передавать как парметр.
1
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.01.2012, 04:40 #3
Цитата Сообщение от Korbofos Посмотреть сообщение
Robo::radar_write()
Не статический метод таким образом вызвать нельзя.
1
Korbofos
4 / 4 / 0
Регистрация: 15.08.2011
Сообщений: 154
30.01.2012, 14:07  [ТС] #4
А массив класса Сом
C++
1
2
protected:
unsigned char bufrd[BUFSIZE], bufwr[BUFSIZE];
Будет каждый раз создаваться новый? или нужно объявить как статик?
И ещё один вопрос
Нужно порезать программу на модули, что бы увидеть увидеть класс Сом из Com.cpp в Robo.cpp. Нужно объявить в Robo.hpp
C++
1
extern class Com
?
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.01.2012, 14:20 #5
Korbofos,
1. Да, если он не объявлен как static, то является индивидуальным для каждого объекта и, следовательно, будет для каждого объекта создан заново. Поэтому если нужно, чтобы он был единым для всех объектов, то следует объявить его как static.
2. Нет. Структура должна быть следующая:
Class.h
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
#ifndef CLASS_H
#define CLASS_H
 
class Class
{
public:
    Class();
    // other constructors
    
    ~Class();
 
    type1 method1(parameters);
    type2 method2(parameters);
    // ...
    typeN methodN(parameters);
 
protected:
    // ...
 
private:
    // ...
};
 
#endif
Class.cpp
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
#include "Class.h"
 
Class::Class()
{
    // ...
}
 
// Other constructors
 
Class::~Class()
{
    // ...
}
 
type1 Class::method1(parameters)
{
    // ...
}
 
type2 Class::method2(parameters)
{
    // ...
}
 
// ...
 
typeN Class::methodN(parameters)
{
    // ...
}
 
// ...
Файл, где требуется использовать класс Class
C++
1
2
#include "Class.h"
// ...
1
Korbofos
4 / 4 / 0
Регистрация: 15.08.2011
Сообщений: 154
30.01.2012, 21:21  [ТС] #6
А чтобы увидеть Class в другом модуле (например Robo.cpp) нужно подключить к нему Class.hpp?
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.01.2012, 03:36 #7
Korbofos, да.
1
Korbofos
4 / 4 / 0
Регистрация: 15.08.2011
Сообщений: 154
31.01.2012, 19:01  [ТС] #8
C++
1
2
3
4
5
class A
{
void functA();
void functB();
};
Если нужно вызвать functB из functA?
C++
1
2
3
4
5
6
7
8
9
10
11
void A::functA()
{
A ob;
ob.functB();
}
 
int main()
{
A ob;
ob.functA();
}
только так?
0
Том Ардер
Модератор
Эксперт по математике/физике
3772 / 2385 / 303
Регистрация: 15.06.2009
Сообщений: 4,282
31.01.2012, 19:22 #9
Korbofos,
функциям класса доступны все его переменные и другие функции, поэтому просто так:

C++
1
2
3
4
5
6
void A::functA()
{
  .....
  functB();
  .....
}
1
31.01.2012, 19:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2012, 19:22
Привет! Вот еще темы с ответами:

Вызов метода внутреннего класса методом внешнего класса - C++
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про вложенные классы ничего, а задача в конце...

Вызов метода класса без создания экземпляра класса. - C++
В общем мне для функционирования одной программы нужно постоянно вызывать метод одного из классов. Я это делаю с помощью new - delete. Мне...

Вызов метода базового класса из класса-потомка - C++
Нужно вызывать из метода, переопределенного в потомке, соответствующий метод базового класса. При этом они являются виртуальными. Вот...

Вызов метода класса - C++
main.cpp: #include "Processor.h" int main() { pr.show(); //здесь пишет ошибку return 0; }


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

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

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