Передача параметров в классах с наследованием

265
21 декабря 2021, 23:20

Всем привет! Вроде и простое, но не могу понять, как передавать параметры. Хочу передать по значению, хотя не важно как. Есть код. В классе Rational, с помощью конструктора с параметрами хочу сделать числитель и знаменатель, после чего результат их деления записываю в answer. В классе Number, родительском классе, существует метод number_status(). Хочу передать в значение number своё значение answer, чтобы при указании в 76 строке Number_instance.number_status(); мне выводило значение переменной number уже с новым параметром. Впрочем и не только в 76, чтобы после каждого моего класса, Integer, Rational, Natural, выводило ответ записанный в переменную number, которая объявлена в родительском классе Number. Подскажите, как мне это реализовать? Не выпрашиваю код, только советы по реализации.

Код:

#include "pch.h"
#include <iostream>
using namespace std;
class Number {
public:
    double number = 8.2;
    void number_status() {
        cout << "Текущее значение number: " << number;
    }
    ~Number() {};
};
class Integer : public Number {
public:
    void integer_status() {
        cout << "Проверка числа на 'Целое ли число?': " << endl;
        if ((number - int(number)) != 0) {
            cout << "Число не является целым!";
        }
        else {
            cout << "Это целое число!";
        }
        cout << endl;
    }
    ~Integer() {};
};
class Rational : public Number {
private:
    double chislitel;
    double znamenatel;
    double answer;
public:
    void rational_status(double c, double z) {
        chislitel = c; znamenatel = z;
        answer = c / z;
        cout << "Числитель = " << chislitel << endl;
        cout << "Знаменатель = " << znamenatel << endl;
        cout << "Результат деления: " << answer << endl;
        answer = number;
        void number_status();
    }
    ~Rational() {};
};
class Natural : public Number {
public:
    void natural_status() {
        cout << "\nПроверка числа на 'Натуральное ли число?': " << endl << endl;
    }
    ~Natural() {};
};
int main() {
    setlocale(LC_ALL, "rus");
    Number Number_instance;
    Integer Integer_instance;
    Rational Rational_instance;
    Natural Natural_instance;
    Number_instance.number_status();
    cout << "\t " << endl;
    Integer_instance.integer_status();
    cout << "\t " << endl;
    Rational_instance.rational_status(6, 2);
    Number_instance.number_status();
    cout << "\t " << endl;
    Natural_instance.natural_status();
    system("pause");
    return 0;
}
//TODO
//Сделать в Rational через конструктор числитель и знаменатель и выводить результат деления
//Выводить в натуральном через конструктор число
//Сделать для Integer, Natural и Rational общий метод для вывода
Answer 1

Мне кажется, что вы неверно используете полиморфизм.

Классы Integer, Rational и Natural публично наследуют класс Number. Это означает, что все публичные и защищённые (protected) члены базового класса Number доступны наследникам.

То есть класс Integer имеет публичный член double number, так как он унаследовал его от Number, равно как и метод number_status() тоже может быть вызван внутри наследника.

Хочу передать в значение number своё значение answer

Не нужно его передавать. У каждого наследника есть свой number, который можно использовать непосредственно в наследнике.

Например:

#include <iostream>
class Operation
{
public:
    Operation() : result(0) {};
    unsigned result;
    void echo_result()
    {
        std::cout << "Текущее значение result: " << result << '\n';
    }
};
class Adder : public Operation
{
public:
    Adder(const unsigned a, const unsigned b) : a(a), b(b) {};
    unsigned a;
    unsigned b;
    void compute()
    {
        result = a + b;
    }
};
class Multiplier : public Operation
{
public:
    Multiplier(const unsigned a, const unsigned b) : a(a), b(b) {};
    unsigned a;
    unsigned b;
    void compute()
    {
        result = a * b;
    }
};
int main()
{
    Adder adder(7, 3);
    adder.compute();
    adder.echo_result();
    Multiplier mul(7, 3);
    mul.compute();
    mul.echo_result();
    // Текущее значение result: 10
    // Текущее значение result: 21
}
READ ALSO
Вращение фигуры в openGL относительно заданной точки

Вращение фигуры в openGL относительно заданной точки

Можно ли задать точку вращения для фигуры в openGl? Используя glRotatef() вращается вся плоскость относительно центраДля примера: мне нужно вращать...

220
Как подключить Local Storage к скрипту?

Как подключить Local Storage к скрипту?

Есть переключатель:

237
Динамический массив объектов C#

Динамический массив объектов C#

Есть свой класс (public class MyNum)Как объявить, а потом инициализировать двумерный динамический массив, с объектами моего класса?

135
Вылетает с ошибкой что делать? [закрыт]

Вылетает с ошибкой что делать? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

170