Перегрузка дружественной функции

232
25 декабря 2017, 13:36

Задание: Создать класс целых чисел Integer. Определить перегруженную функцию, воз-вращающую максимальное из двух аргументов. Функция не является членом класса целых чисел. Перегруженные функции имеют аргументы типа int, double, Integer. Тело перегруженных функций должны быть одинаковыми.

Код я написал, он работает. Но сомневаюсь, что правильно реализовал перегрузку дружественных функций. Все ли я правильно сделал?

#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class Integer
{
private:
    double a, b;
public:
    Integer();
    ~Integer();
    void input();
    void output();
    friend int max(int a, double b);
    friend int max(int a, double b, Integer c); 
};
Integer::Integer()
{
    a = 0;
    b = 0;
    cout << "Constructor works" << endl;
}
Integer::~Integer()
{
    cout << "Destructor works" << endl;
    a = NULL;
    b = NULL;
}
void Integer::input()
{
    cout << "Input two elements: " << endl;;
    cin >> a >> b;
}
void Integer::output()
{
    cout << "The largest number is " << max(a,b)<<endl;
}
int max(int a, double b)
{
    if (a > b) {
        cout << "The first number is larger than the second" << endl;
        return a;
    }
    else {
        cout << "The second number is larger than the first" << endl;
        return b;
    }
}
int max(int a, double b, Integer c)
{
    if (a > b) {
        cout << "The first number is larger than the second" << endl;
        return a;
    }
    else {
        cout << "The second number is larger than the first" << endl;
        return b;
    }
}
int main()
{
    Integer c;
    char p='y';
    while (p=='y'||p=='Y')
    {
        c.input();
        c.output(); 
        cout << "Want to continue? y/n" << endl;
        p = _getch();
    }
    return 0;
}
Answer 1

Вы считаете, что это -

class Integer
{
private:
    double a, b;

объявление класса ЦЕЛЫХ чисел?

Как я понимаю, от вас требуется создать класс, в котором хранится целочисленное значение. Типа

class Integer
{
private:
    int a;
public:
    Integer(int i);
    ...
    int value() const;
    // Прочий функционал

После этого все, что вам нужно - это написать

int maximum(int a, int b)       { return (a>b) ? a : b; }
int maximum(double a, double b) { return (a>b) ? a : b; }
Integer maximum(const Integer& a, const Integer& b)
{
    return Integer(maximum(a.value(),b.value()));    
}

Где-то так...

READ ALSO
Как в c++ инкапсулировать объекты?

Как в c++ инкапсулировать объекты?

Что такое инкапсуляция? Как она работает? С какой целью она делается? Покажите на конкретных примерах что из этого в результате получается

212
C++. Компилятор не распознает FindNextFile

C++. Компилятор не распознает FindNextFile

Пишу функцию которая выводит список файлов на экранИспользую функции FindFirstFile & FindNextFile

234
Как найти виджет(-ы), лежащие на QGridLayout

Как найти виджет(-ы), лежащие на QGridLayout

Вопрос в заголовкеПытался сделать так

223
Инициализация n-мерного массива нулями

Инициализация n-мерного массива нулями

Здравствуйте! Возможно, вопрос уже был, однако я усердно искал и не нашелКак инициализировать динамический n-мерный массив нулями при объявлении?...

267