重载赋值运算符指向两个不同的类

问题描述:

我的问题: 我想重载指向两个不同类的赋值运算符。下面是一个例子:重载赋值运算符指向两个不同的类

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; 

这就是为什么我想这样做的原因。请让我知道这是否可能。对我来说,编译器似乎想调用指向指针的默认指针而不是重载的指针。

感谢您的帮助提前!

+0

你使用指针的原因是有缺陷的。至于你没有使用引用的推理。你会通过使用引用来实现你正在尝试的。 – 2013-02-19 01:13:51

+0

您不能为内置类型重载运算符。 – 2013-02-19 01:15:02

+0

嗨德鲁, 感谢您的快速回复。所以你说可以使用引用作为成员? 我正在使用的这本书说以下有关参考文献: 1.参考创建时必须初始化。 (指针可以在任何时候初始化。) 2.一旦引用被初始化为一个对象,它就不能被改变来引用另一个对象。 (指针可以随时指向另一个对象。) 3.不能有NULL引用。您必须始终能够假定参考连接到合法的存储器。 如果你知道wrk arnd。你可以请我sw! TX! – George 2013-02-19 01:17:33

您不能重载运算符指针。

一个选项,如果你想坚持使用操作符重载是让指针包装对象,它包含一个指向对象的对象 - 本质上是一个智能指针,和过载该对象的运营商。

+0

嗨Karthik, 感谢您的回答。这是一个好主意!会试试看。 虽然有一个问题:如果我超载=运算符让我们这样说吧: ic * operator =(ic * i){将数据从i复制到左手边; } 这实际上有效。所以你可以重载指针的赋值操作符。对我来说,问题似乎是lhs和rhs不是同一类型。 (不幸的是我还不能upvote b/c我没有足够的代表) – George 2013-02-19 01:32:48

+0

嗨!所以我已经在我正在进行的项目中实现了您的答案,并且它完美地工作!我希望有足够声誉的人出席并提出你的答案! – George 2013-03-01 01:46:10

+0

@George你可以标记答案为接受,如果它帮助你。它是左边的绿色勾号(?)。 – 2013-03-01 02:15:19