#include <cstdlib>
#include <iostream>

using namespace std;


int doSth(int &a)
{    
     a = 99;
    cout << "doSth => " << a << "\n";
}

class Base
{
public:
    Base () {cout << "Base::Base()\n"; f(); g();}
    //Base (const Base&) {cout << "Base::Base(const Base&)\n"; f(); g();}
    void f () {cout << "Base::f()\n";g();}
    virtual void g () {cout << "Base::g()\n";}
    ~Base () {cout << "Base::~\n";}    
}; 

/*class Derived1 : public Base
{
public:
    Derived1 () {cout << "Derived1::Derived1()\n"; f(); g();}
    Derived1 (const Derived1&) {cout << "Derived1::Derived1(const Derived1&)\n"; f(); g();}
    void f () {cout << "Derived1::f()\n";g();}
    virtual void g () {cout << "Derived1::g()\n";}
    ~Derived1 () {cout << "Derived1::~\n";}
};*/

void f(Base){cout << "f(Base)\n";}

// ТЕСТ
void testInheritance()
{
     Base derived;
     cout << "----------------\n";
     f(derived);     
     cout << "END ----------------\n";
}

int main(int argc, char *argv[])
{
   /* cout << "Hello geek!\n";
    int n = 13;
    int n2 = 65;
    int* pointer = &n;
    //*pointer = 12; // Не може заради константността на съдържанието
    
    //cout << "pointer content = " << *pointer << "\n";
    
    int*& alias = pointer;
    
   // cout << "alias content = " << *alias << "\n";
    
    doSth(n);
    
    cout << "n = " << n << "\n"; */
    
    testInheritance();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

