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

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

Войти
Регистрация
Восстановить пароль
 
Nikollajder
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 3
#1

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

28.01.2014, 11:16. Просмотров 410. Ответов 6
Метки нет (Все метки)

я не волшебник, я только только начал.
суть вопроса вот в чем: был дан код, в котором данные-элементы некоторых классов лежали в открытой секции, по заданию преподавателя эти элементы нужно перенести в закрытые (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;}
...
}
Поможите кто чем может бедному несчастному заочнику
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 11:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция доступа в закрытую зону класса (C++):

Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? - C++
В заголовочном файле &quot;klass.h&quot; есть класс: class klass { int x; public: klass(); ~klass(); void show(); friend void...

Получение доступа к переменным класса из другого класса - C++
Как передать по ссылке переменную из класса А в метод класса В?

Как сделать, чтобы функция класса могла работать с обьектами другого класса - C++
есть класс к примеру class One и класс к примеру class Two нужно чтобы элемент функция класса One могла работать в обьектами класа...

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса? - C++
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и прочее //опущены для уменьшения кода ...

Перегрузка операций: friend-функция или функция-член класса - C++
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и friend. Вот к примеру такой код. class...

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! - C++
Друзья! Почему так? #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот главный класс class A{ ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 11:32 #2
Напишите метод который будет возвращать значение поля. В чем вопрос?
C++
1
2
3
4
    char* GetComp ()
{
    return comp;
}
Нет... чагото я не понимаю в вашем коде...
1
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
28.01.2014, 11:33 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В TByke добавляешь функцию (как сделать реализацию функцию, думаю догадаешься)
C++
1
char* getComp();
Меняешь условие так:
C++
1
strcmp(((TBike*)current)->getComp(),bike->getComp())==0)
1
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)// !!!! вот это

НАШЕЛ ошибку: ";" забыл поставить в объявлении функции
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
28.01.2014, 11:47 #5
C++
1
char* TBcomp () {return comp;}
1
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.01.2014, 11:52 #6
Имеет смысл всё хранить не указатели, а данные. Но коли уж так, то геттер имеет смысл сделать константным:
C++
1
const char* TBcomp () const {return comp;}
1
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;}
...
Вот как то так
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 21:59
Привет! Вот еще темы с ответами:

Нет доступа до вектора класса - C++
Здравствуйте, нужно записать в переменную текст и вектора класса. void Text&lt;Ryad&gt;::Delete(vector&lt;Ryad*&gt; &amp;a ,int l) { ...

Нет доступа к полям класса - C++
вот есть .h файл class LongMath { private: int whole_class = { 0 };//целая часть int fractional_class = { 0 }; //дробная...

Обьявление методов доступа к данным класса. - C++
Не компилируется программа //Обьявление класса Cat. //Переменные-члены обьявляются закрытыми, а открытые методы доступа ...

Сложности с получением доступа к членам класса - C++
Попробую описать проблему, есть класс VstPlugin #include &quot;VstPlugin.h&quot; #include &quot;ExampleEditor.h&quot; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.01.2014, 21:59
Ответ Создать тему
Опции темы

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