#include #include using namespace std; #include using namespace std; class A { private: char* m_s; public: A() { m_s = strdup("default"); cout << "A()" << endl; } A(const char* s) { cout << "A(char)" << endl; m_s = strdup(s); } virtual void prepare() { cout << "A "; } void display() { prepare(); cout << m_s << endl; } virtual ~A() { cout << "A::~A()" << endl;; delete[]m_s; } }; class B : public A { public: B(const char* s) : A(s) { cout << "B(char)" << endl; } B(const B& b) { cout << "B(B)" << endl; } void prepare() { cout << "B "; } ~B() { cout << "B::~B" << endl; } }; void foo(A* obj1, A obj2) { obj1->display(); obj2.display(); } int main() { B obj1("text"); A* obj2 = new B(obj1); foo(&obj1, *obj2); //delete obj2; return 0; }