Дружественные функции

Последнее обновление: 11.03.2023
Упражнение 1

Дан следующий класс Integer, который представляет число:

#include <iostream>

class Integer
{
public:
    Integer(int number)
    {
        value=number;
    }
    void print() const
    {
        std::cout << "Value: " << value << std::endl;
    }
private:
    int value;
};

Добавьте в него функцию, которая сравнивает текущий объект с другим объектом Integer, переданным в качестве аргумента. Функция должна возвращать число больше нуля, если текущий объект больше аргумента; меньше нуля, если текущий объект меньше аргумента, и 0, если объекты равны.

В функции main создайте несколько объектов Integer и сравните их.

Решение
#include <iostream>

class Integer
{
public:
    Integer(int number)
    {
        value=number;
    }
    int compare(const Integer& obj) const
    {
        return value - obj.value;
    }
    void print() const
    {
        std::cout << "Value: " << value << std::endl;
    }
private:
    int value;
};

void print(const Integer& num1, const Integer& num2)
{
	auto result = num1.compare(num2);
    if(result > 0)
    {
        std::cout << "num1 greater than num2" << std::endl;
    }
    else if(result < 0)
    {
        std::cout << "num1 less than num2" << std::endl;
    }
    else 
    {
        std::cout << "num1 is equal to num2" << std::endl;
    }
}
int main()
{
    print(Integer{10}, Integer{20});  // num1 less than num2
    print(Integer{30}, Integer{20});  // num1 greater than num2
    print(Integer{10}, Integer{10});  // num1 is equal to num2
}
Упражнение 2

Сделайте функцию compare, которая определена в предыдущем задании в классе Integer, дружественной.

Решение
#include <iostream>

class Integer
{
public:
    Integer(int number)
    {
        value=number;
    }
    friend int compare(const Integer& obj1, const Integer& obj2);
    
    void print() const
    {
        std::cout << "Value: " << value << std::endl;
    }
private:
    int value;
};
// определяем реализацию для дружественной функции
int compare(const Integer& obj1, const Integer& obj2)
{
    return obj1.value - obj2.value;
}

void print(const Integer& num1, const Integer& num2)
{
    auto result = compare(num1, num2);
    if(result > 0)
    {
        std::cout << "num1 greater than num2" << std::endl;
    }
    else if(result < 0)
    {
        std::cout << "num1 less than num2" << std::endl;
    }
    else 
    {
        std::cout << "num1 is equal to num2" << std::endl;
    }
}
int main()
{
    print(Integer{10}, Integer{20});  // num1 less than num2
    print(Integer{30}, Integer{20});  // num1 greater than num2
    print(Integer{10}, Integer{10});  // num1 is equal to num2
}
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850