运算符=在c++(11)工作方向上
operator= in c++ (11) working direction
我正在为我的Project做一个Little rational类,我重载了所有的算术运算符。好吧,当我试图重载运算符=我有一个小,现在我不知道是我的问题(我不知道它是如何工作的)还是我写的代码的问题(写得不好)以下是代码:
class rational{
public:
double& operator=(double& d){
d= this->num/this->den;
return d;
}
double& operator=(rational& r){
double d= r.num/r.den;
return d;
}
double& operator=(){
double d= this->num/this->den;
return d;
}
}
好吧,怎么了?什么是对的?(我认为一切都错了哈哈)
我的目标是做到这一点:
int main(){
rational r(4, 5);
double d= r;
}
我能做吗?如果是,如何?
您不需要用于此目的的赋值运算符,而是应该重载转换运算符;例如
class rational {
private:
int num;
int den;
public:
// ...
operator double() { return double(num) / double(den); }
};
这将允许
rational r(4, 5);
double d = double(r); // d = 0.8
如果您希望更改现有对象的状态,则应使用赋值运算符。您可能不想允许将double赋值给rational,因为这样的操作并没有明确的含义。然而,您可能希望提供用于分配int的助手,例如,除了通常用于分配另一个rational的助手之外:
rational &operator=(const rational &rhs)
{
num = rhs.num;
den = rhs.den;
return *this;
}
rational &operator=(int rhs)
{
num = rhs;
den = 1;
return *this;
}
这里我认为用户定义的转换operator
会更合适。
class rational {
public:
rational( int iNum, int iDen ) : num( iNum ), den( iDen ) {}
// ...
operator double() { return (double)num / (double)den; }
private:
int num;
int den;
};
int main()
{
rational r( 1, 2 );
double n = r;
std::cout << r << std::endl; // output 0.5
return 0;
}
下面是一个小的例子来说明这一点:http://ideone.com/I0Oj66
关于复制分配operator=
:
类
T
的复制赋值运算符是一个名为operator=
的非模板非静态成员函数,它只接受一个类型为T
的参数。
operator=
用于更改现有对象。
例如,您可以使用它来复制另一个对象的状态:
rational &operator=( const rational &rhs )
{
num = rhs.num;
den = rhs.den;
return *this;
}
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 使用Unreal C++获取VR耳机的世界位置/方向
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- 在C++中向零方向近似的最佳方法
- ExtractIconEx:可以工作,但偶尔会崩溃
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- TAB键不能在COM框架的MFC应用程序中工作.但是,方向键可以工作