Как мне присвоить значения моему объекту дроби, используя make_unique ()? - PullRequest
0 голосов
/ 23 апреля 2020
#include <memory> // for std::unique_ptr and std::make_unique
#include <iostream>

class Fraction
{
private:
    int m_numerator;
    int m_denominator;

public:
    Fraction(int numerator, int denominator) :
        m_numerator{ numerator }, m_denominator{ denominator }
    {
    }

    friend std::ostream& operator<<(std::ostream& out, const Fraction &f1)
    {
        out << f1.m_numerator << "/" << f1.m_denominator;
        return out;
    }
    friend operator=(const Fraction &f1,const int numerator,const int denominator){
        f1.m_numerator=numerator;
        f1.m_denominator=denominator;
    }
};

int main()
{
    // Create a single dynamically allocated Fraction with numerator 3 and denominator 5
    std::unique_ptr<Fraction> f1{ std::make_unique<Fraction>(3, 5) };
    std::cout << *f1 << '\n';

    // Create a dynamically allocated array of Fractions of length 4
    // We can also use automatic type deduction to good effect here
    auto f2{ std::make_unique<Fraction[]>(4) };
     f2[0]=(3,5);
     f2[1]=(67,82,5,543345);
    std::cout << f2[0] << '\n';
        std::cout << f2[1] << '\n';

    return 0;
}

1 Ответ

1 голос
/ 23 апреля 2020

Во-первых, operator= может быть реализовано только как функция-член, а не как свободная функция. Так что ваш подход просто неверен. Во-вторых, перегруженный operator= может принимать только один параметр. Ближайшая вещь, которую вы хотите, может быть достигнута, передав initializer_list в качестве этого параметра:

Fraction& operator=(std::initializer_list<int> il){
    // some code validating size of il here 
    this->m_numerator=*il.begin();
    this->m_denominator = *(il.begin()+1);
    return *this;
}

использование выглядит так:

 f2[0]={3,5};
 f2[1]={67,84};

Полная демонстрация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...