Vector3 operator = (const Vector3 &v1)
{
if (&v1 == this)
return *this;
return Vector3(this->x = v1.x, this->y = v1.y, this->z = v1.z);
}
Возвращаю *this
. А что такое *this
. Что в нем хранится? В данном случае в нем хранятся элементы x, y, z
или что? Можно пожалуйста какое нибудь объяснение на пальцах.
*this
находится ссылка на текущий экземпляр класса.В вашем случае *this
имеет тип Vector3&
, если косвенно судить по приведённому коду, то скорее всего в нём содержатся переменные x, y, z
, как вы и написали.
PS. У вас не совсем корректная реализация оператора присваивания, корректнее будет так:
Vector3& operator = (const Vector3 &v1)
{
if (&v1 != this)
{
x = v1.x;
y = v1.y;
z = v1.z;
}
return *this;
}
this
- указатель на объект, в данном случае на объект типа Vector3
.
*this
- объект.
class Vector3
{};
...
Vector3 vector3;
//this - указатель на vector3 в пределах объекта vector3
// для каждого объекта будет this
P.S нужно возвращать ссылку на Vector3
:
Vector3 &operator = (const Vector3 &v1)
operator overloading
‘this’ pointer in C++
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите можно ли как-то записать в 1 строчку следующий код:
Зачем нужен флаг /EHsc для MSVC компилятора? Недавно увидел его в конфиге, почитал доки, но так и не понял о каких синхронных/асинхронных исключениях...