/** Ohjelma, jolla demonstroidaan virtuaalisen destruktorin toimintaa ja eroja C++:n ja Delphin välillä. Miika Nurminen, 3.6.2004. */ //--------------------------------------------------------------------------- #include #include using std::cout; using std::string; using std::endl; class A { protected: string name; void println(string s) { cout << s << endl; } public: A(string name) { println("A:n konstruktori alkaa"); this->name=name; println("A:n konstruktori päättyy"); } virtual ~A() { println("A:n destruktori alkaa"); doIt(); println(" ^--- HUOM!"); println("A:n destruktori päättyy"); } virtual void doIt() { println("A::doIt"); } }; class B : public A { public: // täytyy olla, jotta B voidaan luoda string-parametrilla! B(string name) : A(name) { println("B:n konstruktori"); } virtual ~B() { // override println("B:n destruktori alkaa"); doIt(); println("B:n destruktori päättyy"); } virtual void doIt() { // override println("B::doIt"); } }; #pragma argsused int main(int argc, char* argv[]) { cout << endl << "DESTRUCT - CPP" << endl << endl; A* a2 = new A("a"); cout << "---" << endl; delete a2; cout << std::endl; B* b2 = new B("b"); cout << "---" << endl; delete b2; return 0; } //---------------------------------------------------------------------------