可以将赋值运算符重载为 return 属性 或 class 的值吗?
Can assignment operator be overloaded to return the value of a property of a class?
我想使用赋值运算符 return 属性 的 class 的值。我试图实现这个目的。我在网上搜索了很多,但我访问过的所有网站都在谈论如何重载赋值运算符来像 class 的复制构造函数那样做:class_t& operator=(class_t&);
。任何人都可以帮助我将此运算符重载为 return class 的 属性 的值吗?
这是我的代码:
class A_t
{
private:
int value = 0;
public:
int operator = (A_t); // I failed to overload assignment operator for this
A_t& operator = (int); // I succeeded to overload assignment operator for this
int Value();
void setValue(int);
};
A_t& A_t::operator = (int value)
{
this->setValue(value);
return *this;
}
int operator = (A_t &data)
{
return data.value;
}
int A_t::Value() { return this->value; }
void A_t::setValue(int data) { this->value = data; }
int main()
{
A_t object = 3;
int value = object; // Error: cannot convert 'A_t' to 'int' in initialization
cout << value << endl;
return 0;
}
为此,您需要一个 int
运算符用于您的 class,其中 returns 变量被分配给一个整数。另外 class 错过了 A_t object = 3;
所需的构造函数。更正后的 class 看起来像这样,
class A_t
{
private:
int value = 0;
public:
//int operator = (A_t); <-- You dont need this.
A_t& operator = (int); // I succeeded to overload assignment operator for this
int Value();
void setValue(int);
/**
* Construct using an integer value.
*
* @param val: The value to be set.
*/
A_t(int val) : value(val) {}
/**
* int operator.
*
* @return The value stored inside.
*/
operator int() const
{
return value;
}
/**
* int& operator (optional).
*
* @return The variable stored inside.
*/
operator int& ()
{
return value;
}
};
A_t& A_t::operator = (int value)
{
this->setValue(value);
return *this;
}
int A_t::Value() { return this->value; }
void A_t::setValue(int data) { this->value = data; }
int main()
{
A_t object = 3;
int value = object; // Error: cannot convert 'A_t' to 'int' in initialization
cout << value << endl;
return 0;
}
你不能为此重载operator =
。您可以做的是在 class:
中重载隐式转换为 int
运算符
operator int() const { return value; }
但是,请仔细考虑这对您的情况是否真的是个好主意。通常应该不惜一切代价避免隐式转换,因为它很容易出错(许多聪明人认为 C++ 根本不应该允许定义自定义隐式转换!)。
我想使用赋值运算符 return 属性 的 class 的值。我试图实现这个目的。我在网上搜索了很多,但我访问过的所有网站都在谈论如何重载赋值运算符来像 class 的复制构造函数那样做:class_t& operator=(class_t&);
。任何人都可以帮助我将此运算符重载为 return class 的 属性 的值吗?
这是我的代码:
class A_t
{
private:
int value = 0;
public:
int operator = (A_t); // I failed to overload assignment operator for this
A_t& operator = (int); // I succeeded to overload assignment operator for this
int Value();
void setValue(int);
};
A_t& A_t::operator = (int value)
{
this->setValue(value);
return *this;
}
int operator = (A_t &data)
{
return data.value;
}
int A_t::Value() { return this->value; }
void A_t::setValue(int data) { this->value = data; }
int main()
{
A_t object = 3;
int value = object; // Error: cannot convert 'A_t' to 'int' in initialization
cout << value << endl;
return 0;
}
为此,您需要一个 int
运算符用于您的 class,其中 returns 变量被分配给一个整数。另外 class 错过了 A_t object = 3;
所需的构造函数。更正后的 class 看起来像这样,
class A_t
{
private:
int value = 0;
public:
//int operator = (A_t); <-- You dont need this.
A_t& operator = (int); // I succeeded to overload assignment operator for this
int Value();
void setValue(int);
/**
* Construct using an integer value.
*
* @param val: The value to be set.
*/
A_t(int val) : value(val) {}
/**
* int operator.
*
* @return The value stored inside.
*/
operator int() const
{
return value;
}
/**
* int& operator (optional).
*
* @return The variable stored inside.
*/
operator int& ()
{
return value;
}
};
A_t& A_t::operator = (int value)
{
this->setValue(value);
return *this;
}
int A_t::Value() { return this->value; }
void A_t::setValue(int data) { this->value = data; }
int main()
{
A_t object = 3;
int value = object; // Error: cannot convert 'A_t' to 'int' in initialization
cout << value << endl;
return 0;
}
你不能为此重载operator =
。您可以做的是在 class:
int
运算符
operator int() const { return value; }
但是,请仔细考虑这对您的情况是否真的是个好主意。通常应该不惜一切代价避免隐式转换,因为它很容易出错(许多聪明人认为 C++ 根本不应该允许定义自定义隐式转换!)。