. ++ (, , ) .
Complex& Complex::operator=(const Multinumber &rhs) Multinumber& Multinumber::operator=(const Multinumber&)
, , . ++, IFAIK. , , , . , . Pair Complex? , Steve dynamic_cast . , operator = Multinumber, , .
: . , ( ). , Multinumber& operator+(Multinumber&) - , , , , , , , , . - Multinumber& operator+=(const Multinumber&). Complex :
Complex& Complex::operator+=(const Multinumber &rhs){
const Complex & _rhs = dynamic_cast<const Complex &>(rhs);
imag+=_rhs.imag;
real+=_rhs.real;
return *this;
}
, operator+ new. , - C struct ++. - ( , , , , , , ):
class Multinumber
{
public:
virtual Multinumber* operator+(const Multinumber&);
virtual Multinumber& operator=(const Multinumber&);
virtual bool operator==(const Multinumber&) const;
};
class MultinumberOuter
{
std::unique_ptr<Multinumber> impl_;
public:
explicit MultinumberOuter(Multinumber* pimpl) : impl_(pimpl) {}
MultinumberOuter operator+(const MultinumberOuter& src) const {
return MultinumberOuter(impl_->operator+(*(src.impl_)));
}
MultinumberOuter& operator=(const MultinumberOuter& src) {
impl_->operator=(*(src.impl_));
return *this;
}
bool operator==(const MultinumberOuter& src) const {
return impl_->operator==(*(src.impl_));
}
};
, , . , , , , .