给出以下类别:
class A {
int a;
public:
//..
};
class B : public A {
int b;
public:
//.....
};
如何在operator+=
中实现class B
,以便在给定B b1(.. , ..);
和B b2(.. , .. );
的情况下,如果我愿意b1+=b2;
,那么我将进入{{1} }他的字段的以下值:
b1.a = b1.a + b2.a,和 b1.b = b1.b + b2.b
在以下情况下:
b1
我的问题是如何获得class A {
protected:
int a;
public:
//..
};
class B : public A {
int b;
public:
B& operator+=(const B& bb){
this->a += bb.a; // error..
this->b += bb.b;
return *this;
};
..的字段?
答案 0 :(得分:3)
给A
自己的operator+=
!然后,您只需从B
调用它即可:
class A {
private:
int a;
public:
A(int a) : a(a) { }
A& operator+=(const A &other) {
a += other.a;
return *this;
}
};
class B : public A {
private:
int b;
public:
B(int a, int b) : A(a), b(b) { }
B& operator+=(const B &other) {
A::operator+=(other);
b += other.b;
return *this;
}
};
请参见工作示例here(ideone链接)。