Типирование от типа данных basi c до пользовательского типа - PullRequest
1 голос
/ 28 февраля 2020

Можно ли набрать тип данных cast basi c для типа класса, перегрузив оператор преобразования, или мне нужно перегрузить оператор = в c ++

, просто чтобы очистить

classname obj;
float f=obj;

перегружает оператор приведения типов из класса в число с плавающей точкой, а

float f;
classname obj=f;

переписывает тип с типа float в класс. Так что мой вопрос в основном заключается в том, чтобы последний код был правильным, возможно ли перегрузка приведения типов или мне следует использовать оператор overloading = .

Я знаю, что перегрузка = работает, но я просто хотел узнать, можно ли таким способом перегрузить оператор типизации.

Ответы [ 2 ]

1 голос
/ 28 февраля 2020
classname obj;
float f=obj;

возможно, если classname имеет operator float(), например

class classname
{
     public:
         classname() : value(0.0f) {};
         operator float() const {return value;};
     private:
         float value;
};

, а

float f;
classname obj=f;

возможно, если classname имеет конструктор преобразования, такой как

class classname
{
     public:
         classname(float v) : value(x) {};
     private:
         float value;
};

Если вы хотите назначить существующий объект для float, например

float x;
classname f;
f = x;

, требуется присвоение operator.

class classname
{
     public:
         classname() : value(0.0f) {};
         classname &operator=(float v) {value = v; return *this;}
     private:
         float value;
};

Очевидно, что если вы хотите создать или назначить объект с использованием float, класс должен иметь как соответствующий конструктор, так и соответствующий оператор присваивания.

1 голос
/ 28 февраля 2020

classname obj=f; является инициализацией, тогда вы можете предоставить конвертирующий конструктор , принимающий float для поддержки построения classname из float.

например

class classname {
public:
    classname(float) { ... }
    ...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...