2015-10-03 2 views
1

У меня есть два класса, и я хочу переопределить оператор =.Виртуальное переопределение оператора =

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; 

Является ли это правильный способ сделать это?

Я предполагаю, что мы ДОЛЖНЫ поставить определение оператора = в виртуальном, каждый раз, когда у нас есть этот тип наследования? то же для оператора == и т. д.

+0

'operator = (const Composant & c)' и 'operator = (const Ecran & e)' - совершенно разные методы. Обратите внимание, что вы меняете тип параметра, создавая перегруженный оператор. Последнее не перекрывает первое. – dhke

+0

@dhke Функции членов в разных классах не перегружаются. – curiousguy

+0

'Composant * p = new Ecran' не будет компилироваться. Попробуй! – curiousguy

ответ

1

Это правильный способ сделать это?

Нет виртуальной доставки не будет в:

(*p)=*t; 

Вы просто звоню Composant::operator=. Является ли это правильным способом сделать это или нет, зависит от того, чего вы пытаетесь достичь.

Факс: operator=but not recommended.

+0

Как Composant знает, как использовать оператор = Ecran, если мы ничего не добавим в виртуальную? Смотрите, я использовал указатели Composant ... – Mxsky

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 в правой руке оператора.