开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
cygwin64
问题(Question):
最近正在省思我要把C++定位成怎样的工具
C++的多功能的确很容易导致误用
现在写C++时我都会把"避免过度设计"这句话放在心中
以上都是题外话,我要向各位请教的是C++技术上的问题
之所以说上面这些屁话,是因为这个问题是在思索上面的哲学问题而发现的
下方的程式码,类A定义了operator*和operator+
类B继承自类A,因为方便直接沿用类A的operator+,但定义了自己的operator*
最后在main函数中宣告两个B实例b1和b2,并执行(b2+b1)*3.0
直观上会以为operator*是调用类B的
但事实上是调用类A的,因为在执行operator+时回传的是A reference
想请问C++老手,这样的问题是用什么方法解决?
做type conversion,多型,还是单纯不要乱用operator overload?
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
using namespace std;
class A
{
public:
A& operator+(const A& rhs){cout<<"A& A::operator+(const A&)\n";}
A& operator*(const double& rhs){cout<<"A& A::operator*(const double&)\n";}
};
class B: public A
{
public:
B& operator*(const double& rhs){cout<<"B& B::operator*(const double&)\n";}
B& operator=(const A& rhs){cout<<"B& B::operator=(const A&)\n";}
B& operator=(const B& rhs){cout<<"B& B::operator=(const B&)\n";}
};
int main()
{
B b1, b2;
b1=(b2+b1)*3.0;
/*
output:
A& A::operator+(const A&)
A& A::operator*(const double&)
B& B::operator=(const A&)
*/
}