【发布时间】:2019-02-16 20:02:51
【问题描述】:
我有一个带有几个派生类的Base 类:
class Base {
private:
long id;
public:
Base() {}
~Base() {}
Base &operator = (long temp) {
id = temp;
return *this;
}
};
template <class C>
class Temp1 : public Base {
public:
Temp1() {}
~Temp1() {}
//do something;
};
template <class C>
class Temp2 : public Base {
public:
Temp2() {}
~ Temp2() {}
//do something;
};
class Executor1 : public Temp1<int> {
public:
Executor1() {}
~Executor1() {}
};
class Executor2 : public Temp2<char> {
public:
Executor2() {}
~Executor2() {}
};
我希望这些类支持operator =。
例如:
int main()
{
long id1 = 0x00001111, id2 = 0x00002222;
Executor1 exec1;
Executor2 exec2;
exec1 = id1; //exec2.id = id1;
exec2 = id2; //exec2.id = id2;
}
我在Base 中定义operator =,其声明为Base &operator = (long);。
但是很明显有一个问题是= 不能派生类。所以我必须定义operator = 对每个Executor 做同样的事情。
如何更好地处理Base中的这种情况?
【问题讨论】:
-
我建议不要定义采用不相关类型的
operator=。 -
更好。尽管所有那些丢失的分号也是我所说的事情之一。不过我自己为你修好了。
-
写一个函数
from_int或者定义一个显式构造函数。operator=就像你想定义的那样非常令人困惑,需要一些严肃的理由。 -
不相关,但没有任何虚函数的层次结构非常可疑。
标签: c++ c++11 inheritance operator-overloading