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

Классы - C++

Восстановить пароль Регистрация
 
Korbofos
3 / 3 / 0
Регистрация: 15.08.2011
Сообщений: 137
30.01.2012, 03:01     Классы #1
Помогите школнегу
Имеется несколько классов
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()?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 03:01     Классы
Посмотрите здесь:

C++ Классы
Классы C++
Классы C++
Классы, включающие другие классы C++
C++ классы с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
209 / 209 / 16
Регистрация: 26.12.2010
Сообщений: 691
30.01.2012, 03:25     Классы #2
Цитата Сообщение от Korbofos Посмотреть сообщение
надо создавать объект класса Com в radar_write если он уже создан в main? Или правельние вызвать так
Robo::radar_write()?
да, надо. если есть необходимость использовать значения из main в radar_write, то правильнее будет передавать как парметр.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
30.01.2012, 04:40     Классы #3
Цитата Сообщение от Korbofos Посмотреть сообщение
Robo::radar_write()
Не статический метод таким образом вызвать нельзя.
Korbofos
3 / 3 / 0
Регистрация: 15.08.2011
Сообщений: 137
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
?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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"
// ...
Korbofos
3 / 3 / 0
Регистрация: 15.08.2011
Сообщений: 137
30.01.2012, 21:21  [ТС]     Классы #6
А чтобы увидеть Class в другом модуле (например Robo.cpp) нужно подключить к нему Class.hpp?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.01.2012, 03:36     Классы #7
Korbofos, да.
Korbofos
3 / 3 / 0
Регистрация: 15.08.2011
Сообщений: 137
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();
}
только так?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2012, 19:22     Классы
Еще ссылки по теме:

C++ Классы в c++
C++ Классы
C++ Классы

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

Или воспользуйтесь поиском по форуму:
Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,925
31.01.2012, 19:22     Классы #9
Korbofos,
функциям класса доступны все его переменные и другие функции, поэтому просто так:

C++
1
2
3
4
5
6
void A::functA()
{
  .....
  functB();
  .....
}
Yandex
Объявления
31.01.2012, 19:22     Классы
Ответ Создать тему
Опции темы

Текущее время: 15:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru