Гость
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / как получить доступ из композиций класса в другие композиции . / 25 сообщений из 30, страница 1 из 2
23.05.2021, 16:49
    #40072292
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Вопрос в теме.

Возможно я неверно проектирую класс MAIN, но все же...
предположим есть такая картина :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class X {
int x;

public: 
X(int x1): x(x1){}
int getData() {return x;}
}

class Y {
int y;

public: 
Y(int y1): y(y1){}
int getData() {return y;}
void testY() {......}
}
class MAIN {
X x;
Y y;
public:
MAIN (int xo, int y0): x(x0),y(y0){}
}



а можно ли каким-то образом в методе testY() прощемиться к свойствам X ? скажем вызвать X::getData() ?
Можно конечно наобъялвять статик полей в X и сделать френовым Y для X , но мне это не нравится. можно иначе как-то ?
...
Рейтинг: 0 / 0
23.05.2021, 18:25
    #40072301
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81а можно ли каким-то образом в методе testY() прощемиться к свойствам X ?

Какого объекта? Если MAIN - просто сделай его х и у публичными.

PS: Или (что проще и лучше) - передай его туда как параметр.
...
Рейтинг: 0 / 0
23.05.2021, 18:37
    #40072302
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Dimitry Sibiryakov

PS: Или (что проще и лучше) - передай его туда как параметр.


у меня эта мысль у самого проскочила. но пока не выходит
...
Рейтинг: 0 / 0
23.05.2021, 18:48
    #40072304
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81пока не выходит

Параметры в С++ пишутся в круглых скобках после имени функции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.05.2021, 18:51
    #40072305
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Dimitry Sibiryakov,


круто , вышло вот так :
(в данном случае композиция x класса MAIN "знает" и может использовать весь фарш композиции y)

Код: plaintext
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.
#include <iostream>
class Y {
	int y;

public:
	Y(int y1) : y(y1) {}
	int getData() { return y; }

};

class X {
	int x;
	Y& YLINK;
public:
	X(Y& y,int x1) : x(x1),YLINK(y) {}
	int getData() { return x; }
	void testY() { std::cout << YLINK.getData() << std::endl; }
};


class MAIN {
	X x;
	Y y;
public:
	MAIN(int x0, int y0) :  y(y0), x(this->y , x0) {}
	void TEST() { x.testY(); }
};

int main(){ 
	MAIN M(100, 500);
	M.TEST();
	
	return 0; 
}
...
Рейтинг: 0 / 0
24.05.2021, 09:26
    #40072372
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
"friend"-метод не модно?
...
Рейтинг: 0 / 0
24.05.2021, 12:37
    #40072428
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Не учи нуба плохому.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2021, 14:33
    #40072458
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Давайте не ругаться.
...
Рейтинг: 0 / 0
26.05.2021, 11:33
    #40073034
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Alex_Ustinov
"friend"-метод не модно?


Очень даже модно. friend у меня получалось если баловаться со статик полями, но мне так не понравилось и думаю это плохо.
думаю, что ты имел ввиду подругому , я бы посмотрел как .

Код: plaintext
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.
class X {
    int x;
public: X(int x1) : x(x1) {}
      int getX() { return x; }
};

class Y {
    int y;
public: Y(int y1) : y(y1) {}
      void printYX() {  /* этот метод должен вывести сначала y и каким - 
                        то образом должен прощемиться к комопозиции X текущего объекта MAIN и вывести его поле посредством getX() */  }

};

class MAIN {
    X x;
    Y y;
public:
    MAIN(int x0, int y0) : x(x0), y(y0) {}
    void testMAIN() { y.printYX(); }
};

int main() {
    MAIN M(555, 444);
    M.testMAIN(); //должно вывести: 444 555

}
...
Рейтинг: 0 / 0
26.05.2021, 14:05
    #40073142
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81
Очень даже модно
-1
...
Рейтинг: 0 / 0
26.05.2021, 14:28
    #40073155
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
PetroNotC Sharp
andron81
Очень даже модно
-1


ну хорошо - не модно . я для себя , для общего развития. просто интересно я не имею представления как это делать.
...
Рейтинг: 0 / 0
26.05.2021, 14:38
    #40073159
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81,
для этого здорово помогает паттерны изучать. Без них никак.
https://refactoring.guru/ru/design-patterns/catalog
...
Рейтинг: 0 / 0
26.05.2021, 14:43
    #40073163
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
PetroNotC Sharp
andron81,
для этого здорово помогает паттерны изучать. Без них никак.
https://refactoring.guru/ru/design-patterns/catalog


да какие мне паттерны на этом уровне...

мне интересно как френды расставить . пусть хоть и так делать неправильно.
...
Рейтинг: 0 / 0
26.05.2021, 14:59
    #40073169
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81,
Я не понял твою логику.
Против паттернов невозможно катить бочку так как они с первого класса прогера всегда нужны. В любом ЯП.
"мне интересно хоть и не правильно" )))
Удачи!
...
Рейтинг: 0 / 0
26.05.2021, 15:19
    #40073180
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
PetroNotC Sharp,

патерны надо и круто. но мне сейчас сложно в них упуливаться . или ты хочешь чтобы завяз по уши.
мне же интересно как френдами это сделать.

p.s.
я уже давно сделал храня в композиции ссылку на другую. просто интересно как френдами.
...
Рейтинг: 0 / 0
26.05.2021, 17:25
    #40073231
как получить доступ из композиций класса в другие композиции .
andron81
мне интересно как френды расставить . пусть хоть и так делать неправильно.

вроде Dimitry дал совет про передачу объекта x в класс Y, чтобы:
andron81
прощемиться к свойствам X ? скажем вызвать X::getData() ?

это что сложно??
...
Рейтинг: 0 / 0
26.05.2021, 17:26
    #40073232
как получить доступ из композиций класса в другие композиции .
PetroNotC Sharp
Против паттернов невозможно катить бочку так как они с первого класса прогера всегда нужны. В любом ЯП.

да ладно прям так всегда
...
Рейтинг: 0 / 0
26.05.2021, 17:54
    #40073244
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
бабушкин зайчик,
кодировщику не нужно.
Ему напишут подробное ТЗ, входные выходные, UML, API с заголовками и блок схему ветвлений кода в них)))
А программисту нужны))
...
Рейтинг: 0 / 0
26.05.2021, 19:20
    #40073278
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81
Alex_Ustinov
"friend"-метод не модно?


Очень даже модно. friend у меня получалось если баловаться со статик полями, но мне так не понравилось и думаю это плохо.
думаю, что ты имел ввиду подругому , я бы посмотрел как .

Код: plaintext
1.
 M.testMAIN(); //должно вывести: 444 555


0
https://wandbox.org/permlink/0lUPAqTYPySW3OGn
...
Рейтинг: 0 / 0
26.05.2021, 19:23
    #40073279
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
а, там же реализации нет
...
Рейтинг: 0 / 0
26.05.2021, 19:37
    #40073284
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Alex_Ustinov,
Это не реализация.
Я этот код тебе сделал и какой должен быть результат описал. , чтобы ты туда френды надолбил, ты же пишешь, что френды можно надобавлять и задача будет решена.
...
Рейтинг: 0 / 0
26.05.2021, 19:43
    #40073287
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81,

ааа) я так понял что с friend ты уже сделал и хотел по другому...
...
Рейтинг: 0 / 0
26.05.2021, 19:53
    #40073290
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Alex_Ustinov,

Я изначально сделал до того как создал всю эту тему тут тупо с френдом + статик поля. Потом сделал при помощи поля ссылки на другую композицию в объекте как тут рекомендовали. Но ты предлагал, спользуя только френдовые поля. Как это сделать??
...
Рейтинг: 0 / 0
26.05.2021, 21:07
    #40073311
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
andron81...используя только френдовые поля... нет я говорил о френд-методах, а не "полях".
вариант с friend-методом, прямой доступ к закрытой переменой из другого класса
Код: plaintext
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.
#include <iostream>
class X;

class Y
{
    int y;

public:
    Y(int y1): y(y1) {}
    int getY()
    {
        return y;
    }
    void printXY(X &x);
};

class X
{
    int x;
public:
    X(int x1): x(x1) {}
    // этот ПАБЛИК геттер для второго варианта без friend
    int getX()
    {
        return x;
    }
    friend void Y::printXY(X & x); // для прямого доступа к private 'x' без геттера
};

class MAIN
{
    X x;
    Y y;
public:
    MAIN (int x, int y): x(x),y(y) {}
    void testMAIN()
    {
        y.printXY(x);
    }
};
// реализация printXY вынесена за пределы класса
// вариант - прямой доступ к закрытой переменной из другого класса
void Y::printXY(X & x)
    {
        std::cout << "printXY() x,y = " << x.x << ", " << getY();
    }

int main()
{
    MAIN M(555, 444);
    M.testMAIN();
    return 0;
};


---------
вариант БЕЗ friend-метода, доступ с помощью ГЕТТЕРА
Код: plaintext
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.
#include <iostream>
class X;

class Y
{
    int y;

public:
    Y(int y1): y(y1) {}
    int getY()
    {
        return y;
    }
    void printXY(X &x);
};

class X
{
    int x;
public:
    X(int x1): x(x1) {}
    // этот ПАБЛИК геттер для второго варианта без friend
    int getX()
    {
        return x;
    }
//    friend void Y::printXY(X & x); ЗАКОММЕНТИРОВАН дружественный метод

};

class MAIN
{
    X x;
    Y y;
public:
    MAIN (int x, int y): x(x),y(y) {}
    void testMAIN()
    {
        y.printXY(x);
    }
};
// реализация printXY вынесена за пределы класса
// вариант без friend-метода, с помощью паблик Геттера
void Y::printXY(X & x)
    {
        std::cout << "printXY() x,y = " << x.getX() << ", " << getY();
    }

int main()
{
    MAIN M(555, 444);
    M.testMAIN();
    return 0;
};

как говорится, смотря по какой теме контрольная
...
Рейтинг: 0 / 0
26.05.2021, 21:28
    #40073315
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как получить доступ из композиций класса в другие композиции .
Alex_Ustinov,

Спасибо. Понял.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / как получить доступ из композиций класса в другие композиции . / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]