четверг, 12 марта 2009 г.

C++, полиморфизм

Маленький пример с виртуальными функциями.

#include <iostream>

using namespace std;

class A
{
public:
    void f()
    {
        cout<<"a"<<endl;
    }

    void v()
    {
        cout<<"A"<<endl;
    }
};

class B: public A
{
public:
    void f()
    {
        cout<<"b"<<endl;
    }

    virtual void v()
    {
        cout<<"B"<<endl;
    }
};

class C: public B
{
public:
    void f()
    {
        cout<<"c"<<endl;
    }

    void v()
    {
        cout<<"C"<<endl;
    }
};

void u(A& a)
{
    a.f();
    a.v();
}

void v(A* a)
{
    a->f();
    a->v();
}

void x(B& b)
{
    b.f();
    b.v();
}

void y(B* b)
{
    b->f();
    b->v();
}

void z(B b)
{
    b.f();
    b.v();
}

int main(int argc, char* argv[])
{
    B b;
    C c;
    
    u(b);  u(c);  // aA aA
    v(&b); v(&c); // aA aA

    x(b);  x(c);  // bB bC
    y(&b); y(&c); // bB bC
    
    z(b);  z(c);  // bB bB

    return 0;
}

Комментариев нет:

Отправить комментарий