我在找一個優雅的解決下面的「問題」:重載運營商+
考慮階級基礎和兒童,以及運營商+的方式在這裏工作:
class Base
{
public:
Base(int a=0) : mValue(a) {};
Base(const Base& rhs) : mValue(rhs.mValue) {};
Base& operator=(const Base& rhs) {
if (this==&rhs) return *this;
mValue=rhs.mValue;
}
friend const Base operator+(Base &lhs, Base &rhs);
private:
int mValue;
};
const Base operator+(Base &lhs, Base &rhs)
{
Base result(lhs.mValue+rhs.mValue);
return result;
}
class Child : public Base
{
public:
Child(int a=0) : Base(a) {};
};
int main()
{
Child a(2);
Child b(5);
Child c(a+b); // **** This line ****
Child d;
d=(a+b); // **** or this other one ****
}
在標線主要給出錯誤: 不能從「常量基地」到「少年」
我完全理解的是,運營商已經在T定義轉換他基地類,並返回一個對象類型基地,它不能被轉換爲兒童。 一個解決方案是超載運營商+爲兒童類,但我想知道是否有更好的,成本更低的方法。我的印象是,我忘記了一個更簡單的選擇。謝謝!
'd'在這裏是什麼? – rajenpandit
對不起,錯字:)現在糾正 – DrD
爲什麼'operator ='不返回任何東西?它甚至編譯?另請閱讀[copy-swap-idiom](http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom) – andre