我有两个类,我想要定义operator =。
class Composant {
string description;
...
virtual const Composant& operator=(const Composant &c)
{
description = c.description;
return *this;
}
}
另一个继承了:
class Ecran : Composant {
int format, pitch;
double taille;
...
const Ecran& operator=(const Ecran &e)
{
format = e.format;
taille = e.taille;
pitch = e.pitch;
//traiter composant
Composant::operator=(e);
}
主要代码示例:
Composant *p=new Ecran(.....);
Composant *t=new Ecran(.....);
(*p)=*t;
这是正确的方法吗?
我假设我们必须将operator =的surdefinition放在虚拟中,每次我们有这种类型的继承吗?对于运营商来说= =等等......
答案 0 :(得分:1)
这是正确的方法吗?
没有进行虚拟调度:
(*p)=*t;
您只是致电Composant::operator=
。这是否是正确的做法取决于你想要实现的目标。
可以but not recommended定义虚拟operator=
。
答案 1 :(得分:1)
const Ecran& operator=(const Ecran &e)
{
format = e.format;
taille = e.taille;
pitch = e.pitch;
//traiter composant
Composant::operator=(e);
}
必须返回值
return *this;
(*p)=*t;
调用operator=
类的Composant
而不是Ecran
类,因为它在Composant
上运行。
你可以定义
virtual const Composant& operator=(const Composant &c);
Ecran
类中的将被调用,但是它无法访问运算符右侧的Ecran
成员。