IPrevent abgeleitete Klasse von Gießen zu stützen
class Rect{
// stuff
};
und
class SpecialRect:public Rect{
private:
operator const Rect(){return *this;} // No implicits casts to Rect
public:
// stuff
};
SpecialRect haben erbt alle Eigenschaften und Methoden von Rect außer, dass ich will nicht explizite Konvertierungen von SpecialRect auf das vermeiden, Basisklasse Rect.
Im Code
SpecialRect oneSpecial;
Rect aRect=oneSpecial; // I want this to not compile. (to remind-me to declare aRect as SpecialTect)
Compiliert ohne Fehler. (Ich weiß, dass das Deklarieren der Basisklasse Rect als private es tun würde, aber ich möchte nicht alle Methoden neu implementieren.)
Gibt es eine Möglichkeit, dies zu erreichen?
es ist im Grunde wie fragen "Wie verhindere ich, dass meine Katze ein Tier ist", warum möchten Sie das verhindern? scheint wie gebrochenes Design –
Sie verletzen die alte 'ist eine' Regel: Ihr spezielles Rechteck ist kein Rechteck. –
Sie können sich das [Liskow-Substitutionsprinzip] (https://en.wikipedia.org/wiki/Liskov_substitution_principle) ansehen. – TartanLlama