operator =的虚拟surdefinition

时间:2015-10-03 09:52:00

标签: c++

我有两个类,我想要定义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放在虚拟中,每次我们有这种类型的继承吗?对于运营商来说= =等等......

2 个答案:

答案 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成员。