Personal tools
You are here: Home Projects C++ Cfront releases Release 3.0.3 source demo lang vb_virtual.C
Document Actions

vb_virtual.C

by Michael L Powell last modified 2007-01-26 03:20

Click here to get the file

Size 1.7 kB - File type text/plain

File contents

/*ident	"@(#)cls4:demo/lang/vb_virtual.C	1.1" */
/*#########################################################################
#                       Copyright (c) 1989 AT&T
#                         All Rights Reserved   
#
#                THIS IS PROPRIETARY SOURCE CODE OF AT&T
#       
#                     This code has been published in
#                      C++ Primer by Stanley Lippman
#                    Addison_Wesley Publishing Company
#
#########################################################################*/
#include <iostream.h>

class ZooAnimal { 
public: 
    void virtual locate() const;
    // ...
};
void 
ZooAnimal::locate() const { 
	cout << "ZooAnimal::locate()\n"; 
}

class Bear : virtual public ZooAnimal { 
public: 
    void locate() const; 
    // ...
};
void 
Bear::locate() const { 
	cout << "Bear::locate()\n"; 
}

class Raccoon : virtual public ZooAnimal {};
class Panda : public Raccoon, public Bear {};
class GiantPanda : public Panda {
public:
    void locate() const ;
    // ...
};
void 
GiantPanda::locate() const { 
	cout << "GiantPanda::locate()\n"; 
}

void f( const ZooAnimal *za ) { za->locate(); }

main() {
    GiantPanda lingLing;
    Bear *yogi = &lingLing;
    Raccoon *rocky = &lingLing;

    cout << "Demo: Virtual Function in Virtual Base Hierarchy\n";
    cout << "\nExpected three outputs: GiantPanda::locate()\n";
    f( &lingLing ); 
    f( rocky );
    f( yogi );

    Panda pandy;
    yogi = &pandy;
    rocky = &pandy;

    cout << "\nExpected three outputs: Bear::locate()\n";
    cout << "Bear::locate() dominates ZooAnimal::locate()\n";
    cout << "(*** for explanation, see the demo ``dominate.c'' ***)\n\n";
    f( &pandy );
    f( rocky );
    f( yogi );
    return 0;
}
« May 2024 »
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: