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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
#1

Как получить private переменную класса, функцей членом другого класса - C++

21.12.2012, 19:18. Просмотров 3702. Ответов 20
Метки нет (Все метки)

Игра змейка:

Есть класс поле в котором содержится размеры поля:

C++
1
2
3
4
5
6
7
8
9
class field
{
private:
    int FIELD_START;
    int FIELD_WIDTH_X;
    int FIELD_WIDTH_Y;
public:
...
}
и есть класс змейка
которая должна проверять границы поля в классе field

C++
1
2
3
4
5
6
7
8
class snake
{
private:
...
public:
 
    void SnakeRun();
}
функция SnakeRun()
должна получить:
int FIELD_START;
int FIELD_WIDTH_X;
int FIELD_WIDTH_Y;
из класса field.

не могу никак разобрать как это сделать
Помогите мне.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2012, 19:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как получить private переменную класса, функцей членом другого класса (C++):

Как сделать членом класса экземпляр этого же класса - C++
class Operation { public: bool type; //true = operation, false = number char Operator; Operation L_Op; Operation R_Op; ...

Как получить доступ в private из дочернего класса? - C++
Привет :) Изучаю наследование. Столкнулся с такой проблемой. Написал класс "Figure" и создал его дочерний класс "Square". ...

Можно ли в поле private сконструировать объект с параметрами другого класса? - C++
Например у меня есть классы Basic и Second. Во 2-м классе есть конструктор с параметрами. Можно ли написать что-то типу такого? class...

Как получить доступ к массиву из другого класса? - C++
Подскажите, есть такой код: switch(o_field.fieldArray) { // Код } Этот код находится в классе А, а массив fieldArray...

Приём константных векторов класса, как аргументов в методе другого класса - C++
Есть такой класс: class Order { private: int numberOrder; map <string, int> catalogDish; double totalCost; public: ...

Как переместить из стека одного класса в массив другого класса? - C++
// HW_on.24.11_classStack_SantaClaus.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include...

20
ValeryS
Модератор
6747 / 5156 / 493
Регистрация: 14.02.2011
Сообщений: 17,325
21.12.2012, 19:26 #2
1 ввести в класс field функции получения нужных членов
2 объявить класс snake дружественным(frend) классу field
но по моему члены должны быть не private: а protected:
0
SummerRain
327 / 326 / 17
Регистрация: 16.12.2012
Сообщений: 544
21.12.2012, 22:52 #3
сделай друга этого класса

C++
1
2
3
4
5
6
7
8
9
10
class field
{
private:
    int FIELD_START;
    int FIELD_WIDTH_X;
    int FIELD_WIDTH_Y;
public:
    friend void SnakeRun();
    ...
}
если с "друзьями" не охота заморачиваться, то добавь медоты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class field
{
private:
    int FIELD_START;
    int FIELD_WIDTH_X;
    int FIELD_WIDTH_Y;
public:
    int getFieldStart()
    {
        return FIELD_START;
    }
    int getWidth_X()
    {
        return FIELD_WIDTH_X;
    }int getWidth_Y()
    {
        return FIELD_WIDTH_Y;
    }
...
}
1
ValeryS
Модератор
6747 / 5156 / 493
Регистрация: 14.02.2011
Сообщений: 17,325
21.12.2012, 22:58 #4
Цитата Сообщение от SummerRain Посмотреть сообщение
сделай друга этого класса
друзья не видят private нужен protected
0
SummerRain
327 / 326 / 17
Регистрация: 16.12.2012
Сообщений: 544
21.12.2012, 23:16 #5
Цитата Сообщение от ValeryS Посмотреть сообщение
друзья не видят private нужен protected
этот компилируемый код говорит об обратном
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
33
34
35
36
#include <string>
#include <iostream>
 
class Student
{
private:
    int m_age;
    std::string m_name;
public:
    Student(std::string name, int age)
        : m_name(name), m_age(age) {}
    ~Student() {}
    std::string getName()
    {
        return m_name;
    }
    int getAge()
    {
        return m_age;
    }
    friend void addAge(Student* s);
};
 
void addAge(Student* s)
{
    s->m_age++;
}
 
void main()
{
    Student Peter("Petya", 20);
    std::cout << Peter.getAge() << std::endl;
    addAge (&Peter);
    std::cout << Peter.getAge() << std::endl;
    system("pause");
}
0
ValeryS
Модератор
6747 / 5156 / 493
Регистрация: 14.02.2011
Сообщений: 17,325
21.12.2012, 23:34 #6
Цитата Сообщение от SummerRain Посмотреть сообщение
этот компилируемый код говорит об обратном
ладно признаю
друзей с родственниками попутал
0
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
22.12.2012, 17:13  [ТС] #7
Пробую сделать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class field;
class snake
{
...
public:
 
    int GetFieldX(field *f){ return f->FIELD_WIDTH_X; };
...
};
 
class field
{
private:
    int FIELD_START;
    int FIELD_WIDTH_X;
    int FIELD_WIDTH_Y;
 
public: 
    friend int snake::GetFieldX(field *f);
};
выдает ошибку:

error C2027: использование неопределенного типа "field"

я вроде и предобъявление сделал
Что ж я делаю не так
0
yekka
386 / 150 / 8
Регистрация: 12.05.2011
Сообщений: 450
22.12.2012, 17:16 #8
C++
1
#define private public
1
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
22.12.2012, 17:20  [ТС] #9
Все равно та же самая ошибка
0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
22.12.2012, 17:27 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class field;
class snake
{
public: 
    int GetFieldX(field *f);
};
 
class field
{
private:
    int FIELD_START;
    int FIELD_WIDTH_X;
    int FIELD_WIDTH_Y;
 
public: 
    friend snake;
}; 
int snake::GetFieldX(field *f){ return f->FIELD_WIDTH_X; }
1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.12.2012, 17:30 #11
Боюсь, такую круговую поруку не выразить. Делайте другом класса field весь класс snake. И вычтите себе двадцать очков из кармы, потому что friend вне библиотечного кода (читай: в прикладном коде) = вы что-то делаете не так.
0
anklbenz
7 / 7 / 1
Регистрация: 21.12.2012
Сообщений: 68
22.12.2012, 17:31  [ТС] #12
Всем спасибо разобрался, а вообще думал что нет разницы где описывать функцию в самом классе, или за пределами с использованием ::
0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
22.12.2012, 17:35 #13
Цитата Сообщение от anklbenz Посмотреть сообщение
а вообще думал что нет разницы где описывать функцию в самом классе, или за пределами с использованием
Тогда почитайте о сильно связанных классах, о раздельной компиляции и т.д.
1
Mr.X
Эксперт С++
3052 / 1697 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
22.12.2012, 19:30 #14
Цитата Сообщение от Croessmah Посмотреть сообщение
Тогда почитайте о сильно связанных классах, о раздельной компиляции и т.д.
Для начала автору темы неплохо о структурах почитать.
0
Gus
25 / 36 / 2
Регистрация: 17.02.2009
Сообщений: 364
22.12.2012, 19:36 #15
Используйте адрессацию и разадресацию.
Создайте функцию которая возвращает указатель на переменную.
например
int *GetFILEDSTART(){return &FILED_START;}
0
22.12.2012, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2012, 19:36
Привет! Вот еще темы с ответами:

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

Массив объектов класса как член другого класса - C++
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: player(); player(char*); ...

Как получить hwnd элемента диалога с другого класса? - C++
Как получить hwnd элемента диалога с другого класса? Допустим, сижу в другом классе диалоге и при одном событии сделать недоступной...

Ссылка на переменную другого класса - C++
Всем привет ! Хочу создать ссылку на переменную класса Animation. class PLAYER { public: .... float...


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

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

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