Definieren des Basisklassenoperators == 'in Bezug auf den abgeleiteten Klassenoperator ==' in C ++ 11?

8

Angenommen, ich habe eine Typhierarchie:

%Vor%

Jedes Di hat sein eigenes operator== definiert:

%Vor%

Ich möchte nun das B operator== so definieren, dass:

%Vor%

Was ist der beste Weg, dies zu organisieren oder dies zu schreiben?

(Das Endziel ist, dass ich die Standard-Containertypen mit einem Werttyp von B * verwenden möchte (zB std::set<B*> ), aber dafür die benutzerdefinierte Di::operator==s verwenden soll, wenn sie aus derselben abgeleiteten Klasse stammen)

    
Andrew Tomazos 28.05.2013, 12:38
quelle

2 Antworten

6

Definieren Sie eine geschützte virtuelle Funktion in der Basisklasse. Machen Sie es rein virtuell, um sicherzustellen, dass jede Unterklasse Di eine Implementierung bereitstellt. Die Funktion kennt das Ziel der Besetzung, da sie zu Di gehört. Rufen Sie diese Funktion vom Operator == in der Basisklasse auf und lassen Sie den Vergleich folgendermaßen ablaufen:

%Vor%

Der Effekt dieses Konstrukts macht die Implementierung des Operators == virtuell.

    
dasblinkenlight 28.05.2013 12:45
quelle
1

Hier eine kleine Variation von dasblinkenlight Lösung mit zusätzlichen Funktionen (z. B. weniger Code-Duplizierung)

%Vor%     
Cassio Neri 28.05.2013 16:04
quelle

Tags und Links