powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / как получить доступ из композиций класса в другие композиции .
30 сообщений из 30, показаны все 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
как получить доступ из композиций класса в другие композиции .
    #40073391
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
как получить доступ из композиций класса в другие композиции .
    #40073408
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
Не "похоже" совсем а кардинально разное.
Композиция это ООП. А тут хак.
Вы еще добавьте деление на файлы заголовки и пространство имен.
Пример будет более жизненный.
"смотря по какой теме контрольная"))
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #40073409
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

контрольные были последний раз лет так 20 назад )))))
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #40073414
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
Шутка была. Мне понравилась.
...
Рейтинг: 0 / 0
как получить доступ из композиций класса в другие композиции .
    #40073457
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы - пожизненные студенты. Так шта приготовтесь к новой контрольной...
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / как получить доступ из композиций класса в другие композиции .
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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