我有一个基础容器类,它有许多运算符(=、+、-、+= 等)。预计派生类不需要更改运算符的逻辑。因此,理想情况下,我希望对其所有派生类使用基类运算符,而不必为每个派生类显式地重新定义它们(赋值运算符除外)。
下面基于一个简单的示例演示了我提出的解决方案。该解决方案似乎有效,但我对该方法对更复杂情况的有效性表示怀疑。您认为在 B 类中使用此作业“hack”是否有效?这种方法的潜在缺陷是什么?有什么我错过的吗?是否有更简单的方法来实现我需要的功能(即对派生类使用基类运算符)?
class A
{
protected:
int a;
public:
A(int ca)
{
a=ca;
}
A(const A& A1)
{
a=A1.a;
}
int geta() const
{
return a;
}
void seta(int ca)
{
a=ca;
}
const A& operator=(const A& A1)
{
a=A1.a;
return *this;
}
};
const A operator+(const A& A1, const A& A2)
{
A myA(A1.geta()+A2.geta());
return myA;
}
class B: public A
{
public:
B(int a): A(a) {}// ... using A::A;
const B& operator=(const B& B1)
{
a=B1.geta();
return *this;
}
const B& operator=(const A& B1)
{
a=B1.geta();
return *this;
}
};
int main()
{
B myB(4);
A myA(3);
//need this to work
myB=myB+myB;
cout << myB.geta();
myA=myA+myA;
cout << myA.geta();
int j;
cin >> j;
}