c++ - using a method declared pure virtual in derived classes -
this question has answer here:
- pure virtual function implementation 8 answers
i working code , saw odd, method of class "myclass" let's call x() :
virtual void x() = 0;
so myclass abstract class , in myclass.cpp x() has proper implementation... in derived classes of myclass, method called via myclass::x();
i thought = 0
invalidate implementation... it's not case , is, in fact, usable in derived classes.
can please tell compiler when encounters = 0
?
from standard (9.2 class members [class.mem]):
= 0
pure-specifier
it tells compiler that:
- the class abstract
- the method defined outside class definition (usually in derived class)
example 1 (build fails)
if understand question correctly, have that:
class myclass { public: virtual void x() = 0; }; class myderivedclass : myclass { public: virtual void x(); }; void myderivedclass::x() { myclass::x(); } int main() { myderivedclass mdc; mdc.x(); return 0; }
if so, build should fail with:
error:
undefined reference 'myclass::x()'
example 2 (build succeeds)
however, if method myclass::x()
declared pure virtual, can provide definition. following work. class myclass
still abstract, can call method myclass::x()
.
#include <iostream> class myclass { public: virtual void x() = 0; // pure virtual method }; class myderivedclass : myclass { public: virtual void x(); }; void myclass::x() { // pure virtual method definition std::cout << "myclass::x()" << std::endl; } void myderivedclass::x() { myclass::x(); std::cout << "myderivedclass::x()" << std::endl; } int main() { myderivedclass mdc; mdc.x(); return 0; }
output:
myclass::x() myderivedclass::x()
Comments
Post a Comment