Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: как получить доступ из композиций класса в другие композиции .  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Alex_Ustinov
andron81
...используя только френдовые поля...
нет я говорил о френд-методах, а не "полях".
+ вариант с friend-методом, прямой доступ к закрытой переменой из другого класса
#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-метода, доступ с помощью ГЕТТЕРА
#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;
};
как говорится, смотря по какой теме контрольная


нормальный себе способ. по сути похоже на хранение ссылки в композиции поле. с хранением мне нравится больше. ну твой способ имеет право на существование. Спасибо.
27 май 21, 08:12    [22327780]     Ответить | Цитировать Сообщить модератору
 Re: как получить доступ из композиций класса в другие композиции .  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
andron81,
Не "похоже" совсем а кардинально разное.
Композиция это ООП. А тут хак.
Вы еще добавьте деление на файлы заголовки и пространство имен.
Пример будет более жизненный.
"смотря по какой теме контрольная"))
27 май 21, 08:58    [22327797]     Ответить | Цитировать Сообщить модератору
 Re: как получить доступ из композиций класса в другие композиции .  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
PetroNotC Sharp,

контрольные были последний раз лет так 20 назад )))))
27 май 21, 09:16    [22327801]     Ответить | Цитировать Сообщить модератору
 Re: как получить доступ из композиций класса в другие композиции .  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
andron81,
Шутка была. Мне понравилась.
27 май 21, 09:34    [22327806]     Ответить | Цитировать Сообщить модератору
 Re: как получить доступ из композиций класса в другие композиции .  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Вы - пожизненные студенты. Так шта приготовтесь к новой контрольной...
27 май 21, 11:22    [22327853]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / C++ Ответить