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

时间:2013-02-19 01:09:15

标签: c++ overloading variable-assignment operator-keyword

我的问题: 我正在尝试重写赋值运算符以指向两个不同的类。这是一个例子:

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_ */

class 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;
}

我收到以下错误消息:

  

错误:无法在作业中将'ic *'转换为'dc *'

如果我使用引用而不是指针来完成所有这些工作。不幸的是,因为我想使用指向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;

这就是我想这样做的原因。如果可能,请告诉我。对我来说,似乎编译器想要调用指针赋值的默认指针而不是重载指针。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

您不能为指针重载运算符。

如果你想坚持使用运算符重载,一个选项是创建一个指针包装器对象,一个包含指向对象的指针的对象 - 本质上是一个智能指针,并重载该对象的运算符。