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

Функция доступа в закрытую зону класса - C++

Восстановить пароль Регистрация
 
Nikollajder
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 3
28.01.2014, 11:16     Функция доступа в закрытую зону класса #1
я не волшебник, я только только начал.
суть вопроса вот в чем: был дан код, в котором данные-элементы некоторых классов лежали в открытой секции, по заданию преподавателя эти элементы нужно перенести в закрытые (private) секции. Вроде задача не сложная, но что то я никак не могу сообразить со следующим. Приведу почти все объявление классов и ту часть кода где поймал затык.

КЛАССЫ:
C++ (Qt)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class link
{
  public:
    link* prev;
    link* next;
    link* down
    types type;
    link(){prev=next=down=0;}
};
//---------------------------------------------------------------------------
 
class TRoll:public link
{
  private:
    char* date; 
    char* comp;
    int diam;   
    int count; 
 
  public:
    char* TRdate (char* date);//эти функции создавал уже я сам
    char* TRcomp (char* comp);//
    int TRdiam (int diam);//
    int TRcount (int count);//
    TRoll();    
    ~TRoll();  
};
 
class TBike:public link
{
  private:
    char* date;
    char* comp;
    int diam;   
    int count; 
    float weight;
    int speeds;  
 
  public:
    TBike();     
    ~TBike();    
    char* TBdate (char* date);//
    char* TBcomp (char* comp);//
    int TBdiam (int diam);//
    int TBcount (int count);//
    int TBspeeds (int speeds);//
    float TBweight (float weight);//
};
//--------------------------------------------------------------------------
 
class list
{
  public:
    link* first; 
    link* last; 
    int count_dsp; 
    int count_elem_sp; 
    bool is_empty;   
    list();      
    ~list();    
    void append_bike(TBike*);
    void append_roll(TRoll*);
                                     
    void del(int);    
    void out_list(); 
    void clear_down(int); 
    void clear();     
};
А уперся я вот во что:
C++ (Qt)
1
2
3
4
5
6
7
8
void list::append_bike(TBike*bike)
{.....
 if(current->type==Bike&&
        strcmp(((TBike*)current)->comp,bike->comp)==0)//не знаю как реализовать через отдельную
// функцию этот кусок
        {f=true;break;}
...
}
Поможите кто чем может бедному несчастному заочнику
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 11:16     Функция доступа в закрытую зону класса
Посмотрите здесь:

C++ Обьявление методов доступа к данным класса.
C++ Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! C++
Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? C++
Как сделать, чтобы функция класса могла работать с обьектами другого класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 11:32     Функция доступа в закрытую зону класса #2
Напишите метод который будет возвращать значение поля. В чем вопрос?
C++
1
2
3
4
    char* GetComp ()
{
    return comp;
}
Нет... чагото я не понимаю в вашем коде...
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
28.01.2014, 11:33     Функция доступа в закрытую зону класса #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В TByke добавляешь функцию (как сделать реализацию функцию, думаю догадаешься)
C++
1
char* getComp();
Меняешь условие так:
C++
1
strcmp(((TBike*)current)->getComp(),bike->getComp())==0)
Nikollajder
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 3
28.01.2014, 11:45  [ТС]     Функция доступа в закрытую зону класса #4
По вашим советам написал вот такую функцию:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class ...
 {private: 
   ...
   public:
     char* TBcomp () {return comp};// вот так вот прямо, но компилятор выдает ошибку:
                                                 //Return statment missing: 
 }
 
 //затем вот так
 link* current=first;
while(current)
   {
     if(current->type==Bike&&
        strcmp(((TBike*)current)->TBcomp (),bike->TBcomp ())==0)// !!!! вот это

НАШЕЛ ошибку: ";" забыл поставить в объявлении функции
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
28.01.2014, 11:47     Функция доступа в закрытую зону класса #5
C++
1
char* TBcomp () {return comp;}
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.01.2014, 11:52     Функция доступа в закрытую зону класса #6
Имеет смысл всё хранить не указатели, а данные. Но коли уж так, то геттер имеет смысл сделать константным:
C++
1
const char* TBcomp () const {return comp;}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 21:59     Функция доступа в закрытую зону класса
Еще ссылки по теме:

Получение доступа к переменным класса из другого класса C++
C++ Сложности с получением доступа к членам класса
C++ Нет доступа до вектора класса

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

Или воспользуйтесь поиском по форуму:
Nikollajder
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 3
28.01.2014, 21:59  [ТС]     Функция доступа в закрытую зону класса #7
Вылезла другая проблема:
функции я расставил НО, при компиляции проекта вылезла другая ошибка:

[Linker Error] Unresolved external 'TBike::TBcomp(char *)' referenced from E:\140127\LAB7\IZM3\LR_7.OBJ

Добавлено через 22 минуты
малость поправлюсь с названиями и описаниями
написал вот такое:
f_7.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
class TRoll:public link
{...
 private:
    int count;
 public:
    int TRcount (int count);;//предполагается что вот ЭТО
                                     //передает значение count  в private зону
....
}
и затем в f_7.cpp
C++ (Qt)
1
2
3
4
void list::append_bike(TBike*bike)
{...
 TB.TBcount(1);
}
Но при компиляции проекта вылазить ошибка:
[Linker Error] Unresolved external 'TRoll::TRcount(int)' referenced from E:\140127\LAB7\IZM3\F_7.OBJ

и так по всем подобным функциям

Добавлено через 1 час 12 минут
нешел решение своей проблемы:
надо было написать функцию по другому:

C++ (Qt)
1
2
3
....
void TBcount (int co){count=co;}
...
Вот как то так
Yandex
Объявления
28.01.2014, 21:59     Функция доступа в закрытую зону класса
Ответ Создать тему
Опции темы

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