重载赋值运算符指向两个不同的类
我的问题: 我想重载指向两个不同类的赋值运算符。下面是一个例子:重载赋值运算符指向两个不同的类
dc.h:
#ifndef DC_H_
#define DC_H_
#include "ic.h"
class dc {
double d;
char c;
public:
dc(): d(0), c(0) { }
dc(double d_, char c_): d(d_), c(c_) { }
dc* operator=(const ic* rhs);
~dc() { }
};
#endif /* DC_H_ */
类ic.h:
#ifndef IC_H_
#define IC_H_
class ic {
int i;
char c;
public:
ic(): i(0), c(0) { }
ic(int i_, char c_): i(i_), c(c_) { }
~ic() { }
};
#endif /* IC_H_ */
dc.cpp:
#include "dc.h"
dc* dc::operator=(const ic* rhs) {
d = rhs->i;
c = rhs->c;
return this;
}
ic.cpp:
#include "ic.h"
main.cpp中:
#include "dc.h"
#include "ic.h"
#include<iostream>
int main() {
dc DC;
ic IC;
dc* dcptr = &DC;
ic* icptr = &IC;
dcptr = icptr;
return 0;
}
我收到以下错误信息:这一切
error: cannot convert 'ic*' to 'dc*' in assignment
作品,如果我引用的,而不是指针做到这一点。不幸的是,因为我想使用指向ic和dc的指针作为另一个类中的成员,所以我不能使用引用,因为引用作为成员必须初始化,并且一旦初始化,它们就不能被更改为引用另一个对象。我希望能够使运算用IC和DC例如为:
dc *d1, *d2, *d3;
ic *i1, *i2, *i3;
*d1 = (*d1)*(*i1) + (*i2)*(*d2) - (*d3)*(*i3);
不过我想我的代码看起来不错,不希望有(*)*(*)
所有的地方。取而代之的是这样的:
d1 = d1*i1 + i2*d2 - d3*i3;
这就是为什么我想这样做的原因。请让我知道这是否可能。对我来说,编译器似乎想调用指向指针的默认指针而不是重载的指针。
感谢您的帮助提前!
您不能重载运算符指针。
一个选项,如果你想坚持使用操作符重载是让指针包装对象,它包含一个指向对象的对象 - 本质上是一个智能指针,和过载该对象的运营商。
嗨Karthik, 感谢您的回答。这是一个好主意!会试试看。 虽然有一个问题:如果我超载=运算符让我们这样说吧: ic * operator =(ic * i){将数据从i复制到左手边; } 这实际上有效。所以你可以重载指针的赋值操作符。对我来说,问题似乎是lhs和rhs不是同一类型。 (不幸的是我还不能upvote b/c我没有足够的代表) – George 2013-02-19 01:32:48
嗨!所以我已经在我正在进行的项目中实现了您的答案,并且它完美地工作!我希望有足够声誉的人出席并提出你的答案! – George 2013-03-01 01:46:10
@George你可以标记答案为接受,如果它帮助你。它是左边的绿色勾号(?)。 – 2013-03-01 02:15:19
你使用指针的原因是有缺陷的。至于你没有使用引用的推理。你会通过使用引用来实现你正在尝试的。 – 2013-02-19 01:13:51
您不能为内置类型重载运算符。 – 2013-02-19 01:15:02
嗨德鲁, 感谢您的快速回复。所以你说可以使用引用作为成员? 我正在使用的这本书说以下有关参考文献: 1.参考创建时必须初始化。 (指针可以在任何时候初始化。) 2.一旦引用被初始化为一个对象,它就不能被改变来引用另一个对象。 (指针可以随时指向另一个对象。) 3.不能有NULL引用。您必须始终能够假定参考连接到合法的存储器。 如果你知道wrk arnd。你可以请我sw! TX! – George 2013-02-19 01:17:33