C ++, как передать данные объекта в пользовательский оператор преобразования

Я делаю некоторые семинары для C ++, и я в растерянности от преобразования оператора приведения. Я пытаюсь отобразить двойное значение, используя данные объекта.

class object {
int x;
int y;
public:
operator double();
}

мастерская должна взять результат x / y и отобразить его как double.
так что, если бы я должен был отобразить его по линии, как

std::cout << (double)A

при условии, что x равен 3, а y равен 2, значение должно отображаться как 1,5.
Я не уверен, как дать определение этому, что у меня есть что-то вроде этого

Object::operator double() {
double dbl = 0;
dbl = this->x / this->y
return dbl;
}

Теперь это, очевидно, неправильно, потому что мои значения x и y являются случайными и не получают значения объекта A. Я не уверен, как передать данные в функцию. Любая помощь будет оценена

0

Решение

мастерская должна принять результат x / y и отобразить его как double, так что, если бы я должен был отобразить это как

std::cout << (double)A

при условии, x 3 и y 2 значение должно отображаться как 1.5,

Для этого конкретного примера вы должны определить operator<<Например:

std::ostream& operator<<(std::ostream &out, const object &value)
{
out << (double) value;
return out;
}

Тогда вы можете передать object прямо к cout (или любой другой ostream Потомок):

std::cout << A;

Я не уверен, как дать определение этому, что у меня есть что-то вроде этого

Object::operator double() {
double dbl = 0;
dbl = this->x / this->y
return dbl;
}

То, что у вас есть, хорошо, если вы объявите оператор преобразования. Хотя вы должны объявить это как constпо крайней мере, так как он не изменяет членов object, Просто будьте осторожны y=0, так как деление на 0 является ошибкой. И обратите внимание, что вы выполняете целочисленное деление вместо деления с плавающей запятой, поэтому вам нужно привести одно из значений к double до деления.

Теперь это явно неправильно, потому что мой x а также y значения случайные и не получают значения объекта A,

Если вы получаете случайные результаты, это означает, что ваши входные данные случайны для начала (т. Е. Вы, вероятно, не инициализируете свой x а также y переменные). в object декларация, которую вы показали, x а также y являются частными, и вы не предоставляете какой-либо конструктор или метод установки для установки их значений.

Попробуйте что-то более похожее на это:

class object {
int x;
int y;
public:
object();
object(int aX, int aY);

int getX() const;
void setX(int value);

int getY() const;
void setY(int value);

operator double() const;
};

std::ostream& operator<<(std::ostream &out, const object &value);

#include <limits>

object::object()
: x(0), y(0)
{
}

object::object(int aX, int aY)
: x(aX), y(aY)
{
}

int object::getX() const
{
return x;
}

void object::setX(int value)
{
x = value;
}

int object::getY() const
{
return y;
}

void object::setY(int value)
{
y = value;
}

object::operator double() const
{
if (y != 0)
return (double)x / (double)y;
return std::numeric_limits<double>::quiet_NaN();
}

std::ostream& operator<<(std::ostream &out, const object &value)
{
out << (double) value;
return out;
}

Тогда вы можете делать такие вещи:

object A(3, 2);
std::cout << A;

object A;
A.setX(3);
A.setY(2);
std::cout << A;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]