/* * NMSTL, the Networking, Messaging, Servers, and Threading Library for C++ * Copyright (c) 2002 Massachusetts Institute of Technology * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include using namespace nmstl; using namespace std; class Super { string desc; static int count; protected: Super(string kind) { desc = kind + to_string(++count); NOTICE << "Constructor: " << desc; } public: virtual ~Super() { NOTICE << "Destructor: " << desc; } string as_string() { return desc; } }; int Super::count = 0; class SubA : public Super { public: SubA() : Super("SubA") {} }; class SubB : public Super { public: SubB() : Super("SubB") {} }; int main() { ptr a1(new SubA); ptr b2(new SubB); ptr a1copy = a1; NOTICE << "There are " << a1.use_count() << " copies of a1"; ptr a1copy2 = a1copy.static_cast_to(); NOTICE << "There are " << a1.use_count() << " copies of a1"; b2 = a1copy.dynamic_cast_to(); NOTICE << "There are " << a1.use_count() << " copies of a1"; NOTICE << "b2 is " << b2.get(); return 0; }