home *** CD-ROM | disk | FTP | other *** search
- //: C22:Paste.cpp
- // From Thinking in C++, 2nd Edition
- // Available at http://www.BruceEckel.com
- // (c) Bruce Eckel 1999
- // Copyright notice in Copyright.txt
- //{L} Vendor
- // Fixing a mess with MI
- #include "Vendor.h"
- #include <fstream>
- using namespace std;
-
- ofstream out("paste.out");
-
- class MyBase { // Repair Vendor interface
- public:
- virtual void v() const = 0;
- virtual void f() const = 0;
- // New interface function:
- virtual void g() const = 0;
- virtual ~MyBase() { out << "~MyBase()\n"; }
- };
-
- class Paste1 : public MyBase, public Vendor1 {
- public:
- void v() const {
- out << "Paste1::v()\n";
- Vendor1::v();
- }
- void f() const {
- out << "Paste1::f()\n";
- Vendor1::f();
- }
- void g() const {
- out << "Paste1::g()\n";
- }
- ~Paste1() { out << "~Paste1()\n"; }
- };
-
- int main() {
- Paste1& p1p = *new Paste1;
- MyBase& mp = p1p; // Upcast
- out << "calling f()\n";
- mp.f(); // Right behavior
- out << "calling g()\n";
- mp.g(); // New behavior
- out << "calling A(p1p)\n";
- A(p1p); // Same old behavior
- out << "calling B(p1p)\n";
- B(p1p); // Same old behavior
- out << "delete mp\n";
- // Deleting a reference to a heap object:
- delete ∓ // Right behavior
- } ///:~
-