開發平台(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&)
*/
}