我的問題: 我想重載指向兩個不同類的賦值運算符。下面是一個例子:重載賦值運算符指向兩個不同的類
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;
這就是爲什麼我想這樣做的原因。請讓我知道這是否可能。對我來說,編譯器似乎想調用指向指針的默認指針而不是重載的指針。
感謝您的幫助提前!
你使用指針的原因是有缺陷的。至於你沒有使用引用的推理。你會通過使用引用來實現你正在嘗試的。 – 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