powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / как получить доступ из композиций класса в другие композиции .
25 сообщений из 30, страница 1 из 2
как получить доступ из композиций класса в другие композиции .
    #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
как получить доступ из композиций класса в другие композиции .
    #40072301
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81а можно ли каким-то образом в методе testY() прощемиться к свойствам X ?

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

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

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


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

Параметры в С++ пишутся в круглых скобках после имени функции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #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
как получить доступ из композиций класса в другие композиции .
    #40072372
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"friend"-метод не модно?
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #40072428
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не учи нуба плохому.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #40072458
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте не ругаться.
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #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
как получить доступ из композиций класса в другие композиции .
    #40073142
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Очень даже модно
-1
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #40073155
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andron81
Очень даже модно
-1


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


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

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

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

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

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

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

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


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

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


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

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

Я изначально сделал до того как создал всю эту тему тут тупо с френдом + статик поля. Потом сделал при помощи поля ссылки на другую композицию в объекте как тут рекомендовали. Но ты предлагал, спользуя только френдовые поля. Как это сделать??
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #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
как получить доступ из композиций класса в другие композиции .
    #40073315
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

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


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