#include <iostream>
using namespace std;
class TestBase
{
public:
TestBase() { cout << "base class constructor\n"; }
virtual ~TestBase() { cout << "base class destructor\n"; }
virtual void testFunc() = 0;
};
class TestDerived : public TestBase
{
public:
TestDerived() : TestBase() { cout << "derived class constructor\n"; }
~TestDerived() { cout << "derived class destructor\n"; }
void testFunc() { cout << "derived class testFunc\n"; }
};
void testingFunc(TestBase &tBase)
{
tBase.testFunc();
}
int main() {
TestDerived tD;
testingFunc(tD);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVzdEJhc2UKewoJcHVibGljOgoJCglUZXN0QmFzZSgpIHsgY291dCA8PCAiYmFzZSBjbGFzcyBjb25zdHJ1Y3RvclxuIjsgfQoJdmlydHVhbCB+VGVzdEJhc2UoKSB7IGNvdXQgPDwgImJhc2UgY2xhc3MgZGVzdHJ1Y3RvclxuIjsgfQoJdmlydHVhbCB2b2lkIHRlc3RGdW5jKCkgPSAwOwp9OwoKY2xhc3MgVGVzdERlcml2ZWQgOiBwdWJsaWMgVGVzdEJhc2UKewoJcHVibGljOgoJCglUZXN0RGVyaXZlZCgpIDogVGVzdEJhc2UoKSB7IGNvdXQgPDwgImRlcml2ZWQgY2xhc3MgY29uc3RydWN0b3JcbiI7IH0KCX5UZXN0RGVyaXZlZCgpIHsgY291dCA8PCAiZGVyaXZlZCBjbGFzcyBkZXN0cnVjdG9yXG4iOyB9Cgl2b2lkIHRlc3RGdW5jKCkgeyBjb3V0IDw8ICJkZXJpdmVkIGNsYXNzIHRlc3RGdW5jXG4iOyB9Cn07Cgp2b2lkIHRlc3RpbmdGdW5jKFRlc3RCYXNlICZ0QmFzZSkKewoJdEJhc2UudGVzdEZ1bmMoKTsKfQoKaW50IG1haW4oKSB7CglUZXN0RGVyaXZlZCB0RDsKCXRlc3RpbmdGdW5jKHREKTsKCXJldHVybiAwOwp9