-1
因此,我已寫了一些代碼實現此層次結構:操作+/-重載如在C++中的非成員函數
class A
{
int x;
int y;
public:
A() { }
void setX(int x) { this->x = x;}
void setY(int y) { this->y = y;}
int getX(void) { return x;}
int getY(void) { return y;}
virtual int somefunc() = 0;
friend B operator- (B b1, B b2);
};
class B : public A
{
int somefunc() {return 0;}
};
class C : public A
{
int somefunc() {return 1;}
};
class D : public C
{
int somefunc() {return 2;}
};
/*
// 1 st attempt - fail
A operator- (const A& a_inst, const A& a_inst2)
{
A a_temp;
a_temp.setX(a_inst.getX() - a_inst2.getX());
a_temp.setY(a_inst.getY() - a_inst2.getY());
return a_temp;
}
// 2nd attempt - FAIL
const A* operator- (const A* a1, const A* a2)
{
a1.setX(a1.getX() - a2.getX());
a1.setY(a1.getY() - a2.getY());
return a1;
}
//*/
//3rd attempt
B operator- (B b1, B b2)
{
int temp1x = b1.getX();
int temp2x = b2.getX();
b1.setX(temp1x - temp2x);
int temp1y = b1.getY();
int temp2y = b2.getY();
b2.setY(temp1y - temp2y);
return b1;
}
int main()
{
B b();
C c();
b = b - dynamic_cast<B*>(c) ;
}
我明白的是,由於A是一個抽象類不能被實例化,所以我不能用類A實例來完成它。
是否有可能重載兩個+/-一次(每個)並使其適用於屬於此層次結構中的類的每個實例?此外,我想指出的是,我希望能夠做不同的類的對象,同樣的事情在同一時間,像這樣:
C c;
B b;
b = b - c;
編輯1〜添加超載的第二個版本,我目前試圖去工作。
EDIT 2〜制定者
編輯3〜更正的錯誤的呼叫添加了第三個版本,仍然得到錯誤
你知道你的結果應該是什麼類型嗎? D - D是否產生一個D? 「B - D」會合法嗎?如果是這樣,那麼結果類型是什麼? –
@DrewDormann我想這是合法的。我想要做的是添加/減去x和y值(這個層次結構中的每個類都有它們)。無論類的(涉及)類型如何,這都適用。 (RE-EDITed) – Mechanic
有沒有理由不能將它作爲A的成員函數實現? – awr