umb*_*JYL 3 c++ inheritance operator-overloading c++11
我有一个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() {}
};
Run Code Online (Sandbox Code Playgroud)
我希望这些课程得到支持operator =.
例如:
int main()
{
long id1 = 0x00001111, id2 = 0x00002222;
Executor1 exec1;
Executor2 exec2;
exec1 = id1; //exec2.id = id1;
exec2 = id2; //exec2.id = id2;
}
Run Code Online (Sandbox Code Playgroud)
我operator =在Base其声明中定义Base &operator = (long);.
但是有一个问题显然是=无法派生类.所以我必须定义operator =完全对每个人做同样的事情Executor.
如何以Base更好的方式处理这个案子?
您必须将= -operator拉入类的范围:
class Base
{
public:
long id;
Base& operator=(long id)
{
this->id = id;
return *this;
}
};
class Temp2
: public Base
{
public:
using Base::operator=;
};
Run Code Online (Sandbox Code Playgroud)
你必须将operator =拉入范围,因为隐式生成的复制操作符= Temp2隐藏了operator = of Base.从@Angew的评论中得到了这个暗示.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |