2

私の質問: 2 つの異なるクラスへのポインターの代入演算子をオーバーロードしようとしています。次に例を示します。

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

次のエラー メッセージが表示されます。

エラー: 代入で '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;

これが私がこれをやりたい理由です。これが可能かどうか教えてください。私には、コンパイラは、オーバーロードされたポインターの代わりに、ポインター割り当てへのデフォルトのポインターを呼び出したいようです。

事前にご協力いただきありがとうございます。

4

1 に答える 1

10

ポインターの演算子をオーバーロードすることはできません。

演算子のオーバーロードに固執する場合の 1 つのオプションは、オブジェクトへのポインターを含むオブジェクトであるポインター ラッパー オブジェクト (本質的にはスマート ポインター) を作成し、そのオブジェクトの演算子をオーバーロードすることです。

于 2013-02-19T01:17:23.877 に答える