Перегрузка оператора присваивания для указателей на два разных класса
Мой вопрос: я пытаюсь перегрузить оператор присваивания для указателей на два разных класса. Вот пример:
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;
Это причина, почему я хотел бы сделать это. Пожалуйста, дайте мне знать, если это вообще возможно. Мне кажется, что компилятор хочет вызвать указатель по умолчанию для назначения указателя вместо перегруженного.
Заранее спасибо за помощь!