継承とライフサイクル

戻る
::::::::::::::
Inheritance.cpp
::::::::::::::
// $Id: Inheritance.html,v 1.1 2009/06/22 16:11:46 kishi Exp kishi $
#include <iostream>
using namespace std;

class Cat {
    string name;
public:
    // constructor
    Cat( string x ) : name( x ) {
        cout << endl;
        cout << "Cat's instance " << name << " is CREATED! " << endl;
    }

    void method() const {
        cout << endl;
        cout << "Cat's instance " << name << " method() invoked ... " << endl;
    }

    string getName() const {
        return name;
    }

    // destructor
    ~Cat() {
        cout << endl;
        cout << "Cat's instance " << name << " is DESTROYED! " << endl;
    }
};

// Derived class of Cat
class WildCat : public Cat {
public:
    // constructor
    WildCat( string x ) : Cat( x ) {
        cout << "WildCat's instance " << getName() << " is CREATED! " << endl;
    }
    // destructor
    ~WildCat() {
        cout << "WildCat's instance " << getName() << " is DESTROYED! " << endl;
    }
    void method() const {
        cout << "WildCat's instance " << getName() << " method() invoked ... " << endl;
    }
};

// Derived class of WildCat
class TamedCat : public WildCat {
public:
    // constructor
    TamedCat( string x ) : WildCat( x ) {
        cout << "TamedCat's instance " << getName() << " is CREATED! " << endl;
    }
    ~TamedCat() {
        cout << "TamedCat's instance " << getName() << " is DESTROYED! " << endl;
    }
    void method() const {
        cout << "TamedCat's instance " << getName() << " method() invoked ... " << endl;
    }
};

int main() {
    Cat one( "[ Ancestor ]" ), two( "[ Progenitor ]" );
    WildCat three( "[ Frank Simatra ]" ), four( "[ Butchie Whitemore ]" );
    TamedCat five( "[ Tama ]" );

    one.method();
    two.method();
    three.method();
    four.method();
    five.method();

    return 0;
}


■実行結果
$ ./Inheritance.exe

Cat's instance [ Ancestor ] is CREATED!

Cat's instance [ Progenitor ] is CREATED!

Cat's instance [ Frank Simatra ] is CREATED!
WildCat's instance [ Frank Simatra ] is CREATED!

Cat's instance [ Butchie Whitemore ] is CREATED!
WildCat's instance [ Butchie Whitemore ] is CREATED!

Cat's instance [ Tama ] is CREATED!
WildCat's instance [ Tama ] is CREATED!
TamedCat's instance [ Tama ] is CREATED!

Cat's instance [ Ancestor ] method() invoked ...

Cat's instance [ Progenitor ] method() invoked ...
WildCat's instance [ Frank Simatra ] method() invoked ...
WildCat's instance [ Butchie Whitemore ] method() invoked ...
TamedCat's instance [ Tama ] method() invoked ...
TamedCat's instance [ Tama ] is DESTROYED!
WildCat's instance [ Tama ] is DESTROYED!

Cat's instance [ Tama ] is DESTROYED!
WildCat's instance [ Butchie Whitemore ] is DESTROYED!

Cat's instance [ Butchie Whitemore ] is DESTROYED!
WildCat's instance [ Frank Simatra ] is DESTROYED!

Cat's instance [ Frank Simatra ] is DESTROYED!

Cat's instance [ Progenitor ] is DESTROYED!

Cat's instance [ Ancestor ] is DESTROYED!

$ ./Inheritance.exe  | grep Tama
Cat's instance [ Tama ] is CREATED!
WildCat's instance [ Tama ] is CREATED!
TamedCat's instance [ Tama ] is CREATED!
TamedCat's instance [ Tama ] method() invoked ...
TamedCat's instance [ Tama ] is DESTROYED!
WildCat's instance [ Tama ] is DESTROYED!
Cat's instance [ Tama ] is DESTROYED!
戻る

inserted by FC2 system