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

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

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

Классы - C++

30.01.2012, 03:01. Просмотров 552. Ответов 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()?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 03:01     Классы
Посмотрите здесь:

C++ классы
C++ Классы С++
Классы C++
C++ Классы
C++ Классы
Классы в С++ C++
классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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, то правильнее будет передавать как парметр.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.01.2012, 04:40     Классы #3
Цитата Сообщение от Korbofos Посмотреть сообщение
Robo::radar_write()
Не статический метод таким образом вызвать нельзя.
Korbofos
4 / 4 / 0
Регистрация: 15.08.2011
Сообщений: 153
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
Эксперт С++
4956 / 3032 / 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"
// ...
Korbofos
4 / 4 / 0
Регистрация: 15.08.2011
Сообщений: 153
30.01.2012, 21:21  [ТС]     Классы #6
А чтобы увидеть Class в другом модуле (например Robo.cpp) нужно подключить к нему Class.hpp?
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.01.2012, 03:36     Классы #7
Korbofos, да.
Korbofos
4 / 4 / 0
Регистрация: 15.08.2011
Сообщений: 153
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++
C++ Классы

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

Или воспользуйтесь поиском по форуму:
Том Ардер
Модератор
Эксперт по математике/физике
3705 / 2318 / 287
Регистрация: 15.06.2009
Сообщений: 4,101
31.01.2012, 19:22     Классы #9
Korbofos,
функциям класса доступны все его переменные и другие функции, поэтому просто так:

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

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