Hejsan! Det går inte, vad du ska göra att inte göra den virtual. Men notera dock. Om man har en klass Derived:Hindra omdefinition av en medlemsfunktion
Vi säger vi har en klass som denna typ:
<code>
class Base {
protected:
/* ..... massa saker här .....*/
public:
/*
konstruktörer med mera
*/
virtual ~Base() { /* massa saker här med */ }
std::string getName() const { return name; }
void listen() const = 0;
};
</code>
Så kan man ju lätt omdefiniera medlems funktionen getName(). Detta vill jag dock inte ska gå, hur gör jag det?
Tack på förhand!Sv: Hindra omdefinition av en medlemsfunktion
Vad man säger till användare som tittar på koden är följande:
"not virtual" = om du byter ut den e du dum i huvet
"virtual" = fritt fram att byta ut den, men du måste inte
"pure virtual" = du måste byta ut den (eventuellt kan man ge en default-implementation som explicit måste användas).
Effekten blir att någon som använder en Base & eller en Base * alltid kommer anropa getName från Base.
Det är nog den effekten du vill ha.Sv: Hindra omdefinition av en medlemsfunktion
class Derived : public Base
{
getName(...);
}
Så blir det så här:
Derived d;
Base *b=&d, &ref = d;
d.getName(); //anropar Derived-versionen
b->getName(); //anropar Base-versionen
ref.getName(); //anropar Base-versionen
Detta kan tyckas lite märkligt men är egentligen det vettigaste sättet att arbeta på.