C++ C++;多个派生类之间的运算符重载
我有一个基本类和两个派生类。我想实现一些乘法运算符,可以用来将两个类中的对象相乘C++ C++;多个派生类之间的运算符重载,c++,templates,inheritance,operator-overloading,C++,Templates,Inheritance,Operator Overloading,我有一个基本类和两个派生类。我想实现一些乘法运算符,可以用来将两个类中的对象相乘 class Base { public: virtual ~Base() {} virtual void print() = 0; Base operator * (Base & b1, Base & b2) { return b1 * b2; } <---- this wont work because of pure virtual function }; cl
class Base
{
public:
virtual ~Base() {}
virtual void print() = 0;
Base operator * (Base & b1, Base & b2) { return b1 * b2; } <---- this wont work because of pure virtual function
};
class D2;
class D1 : public Base
{
public:
void print() { ....}
D1 operator * (D1 & d) {//do some operation here}
D1 operator * (D2 & d) {//same as above...}
private:
int i;
};
class D2 : public Base
{
public:
void print() { ....}
D2 operator * (D1 & d) { ..... }
D2 operator * (D2 & d) { ..... }
private:
double j;
double m;
};
类基
{
公众:
虚拟~Base(){}
虚空打印()=0;
基运算符*(基&b1,基&b2){return b1*b2;}
//这将导致编译错误
你们想把两个完全不同的对象和第三个对象相乘吗?实际上这并没有任何意义。这个函数原型是在运算符使用非成员函数重载时使用的
所以对于你的班级,你也可以使用
Base operator * (Base & b2) { return *this * b2; }
//假设函数类不是抽象的
这基本上扩展为->运算符*(b2)
现在谈到
D1 operator * (D1 & d) {//do some operation here}
D1 operator * (D2 & d) {//same as above...}
为什么这行?为什么需要两个函数
您可以使用转换函数从一种类型的对象进行转换,反之亦然
然后只有一个过载的操作员*可以完成您的工作。
虽然,代码的数量几乎相同,但至少看起来是一样的
清洁工
您也可以使用模板,但为此,必须有一个用于运算符重载的通用实现。
这可以通过使用转换函数来实现,因为这样就可以为运算符*函数实现通用代码
如果我完全误解了您的问题,或者我正朝着完全相反的方向走,请告诉我。您是否考虑过外部运算符*
,它不是这两个类的方法,但可能是这两个类的朋友?
D1 operator * (D1 & d) {//do some operation here}
D1 operator * (D2 & d) {//same as above...}