Featured post
c++ - how to prevent calling virtual function in constructor or desturctor? -
some c++ materials mention can't call virtual function inside ctor or dtor,
(
sorry ,i think it's better change to
c++ materials mention we'd better not call virtual function inside ctor or dtor,
)
but may call them accidentally. there way prevent that?
for example:
# include < iostream > using namespace std; class cat { public: cat(){ f();} virtual void f(){cout<<"void cat:f()"<<std::endl;} }; class smallcat :public cat { public: smallcat():cat() { } void f(){cout<<"void smallcat:f()"<<std::endl;} }; int main() { smallcat sc; }
output:
void cat::f() //not expected!!!
thanks
you need throw "c++ materials" garbage bin.
you can call virtual functions constructor or destructor. , job. need aware of language specification states virtual dispatch mechanism works in accordance current dynamic type of object, not final intended dynamic type. these types not same object under construction/destruction, confuses newbies when attempt invoke virtual functions constructors/destructors. nevertheless, calling virtual functions constructor , destructor useful feature of language, long know , how work in such cases. why want "prevent" it?
it saying division operator dangerous since 1 can divide zero, , asking how "prevent" use in program.
- Get link
- X
- Other Apps
Comments
Post a Comment