Я делаю некоторые семинары для 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. Я не уверен, как передать данные в функцию. Любая помощь будет оценена
мастерская должна принять результат
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;
Других решений пока нет …