* dragoncoder:
What are your feeling about the code ?
#include <iostream>
#include <ostream>
using namespace std;
class A {
public:
A() { f(); }
virtual void f() { g(); }
void g() { cout << "A" << endl; }
};
class B: public A {
public:
B() { f(); }
virtual void f() { g(); }
void g() { cout << "B" << endl; }
};
int main() {
A a;
B b;
return 0;
}
I don't know how to express this feeling in English, but I once was
cajoled into a role as a "C++ expert" at a seminar, when I didn't know
much C++ and the only compiler available to me was Turbo C++ 1.0 or
whatever the version was. I did know a good deal about how to interface
C++ and assembly code, but broke into a sweat (literally!) when one of
the participants asked me for help with simple textual /line input/,
which I'd never needed and so knew nothing about. Worse, an example I'd
prepared relied on the misconception that a C++ constructor could call a
derived class' virtual function virtually (because Turbo C++ did that),
and even though this was long before C++ was standardized the ARM said
differently, and one participant pointed this out. In spite of this
most of them were happy. And I got a silver knife as thank-you.
Now you know perhaps how I feel about that code.
But perhaps this was instead about the program's behavior, that it
somehow was unexpected. In that case I suggest visiting the FAQ. E.g.
the item "When my base class's constructor calls a virtual function on
its this object, why doesn't my derived class's override of that virtual
function get invoked", currently at <url:
http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.5>.