
class ParentClass
{
private:
    int     iPrivate;
    static char *pszPrivateStatic;

protected:
    int     iProtected;
    static char *pszProtectedStatic;

public:
    static char *pszPublicStatic;
    static long  lPublicStatic;
    int      iPublic;

    ParentClass()
    {
        iPublic = 1;
        iProtected = 2;
        iPrivate = 3;
    }

    virtual ~ParentClass()
    {
        iPublic = -1;
        iProtected = -2;
        iPrivate = -3;
    }

    virtual int get() const
    {
        return iProtected + iPrivate;
    }

    virtual void set(int i)
    {
        iPublic = i;
        iProtected = i + 1;
        iPrivate = i + 2;
    }

    int getPrivate(void)
    {
        return iPrivate;
    }
};
char *ParentClass::pszPrivateStatic = "PrivateStatic";
char *ParentClass::pszProtectedStatic = "ProtectedStatic";
char *ParentClass::pszPublicStatic = "PublicStatic";
long  ParentClass::lPublicStatic = 42;

class ChildClass : public ParentClass
{
public:
    ChildClass(int &ri) :
        ParentClass()
    {
        ri = getPrivate();
    }
};

int main(void)
{
    int i;
    ChildClass *pObj = new ChildClass(i);
    pObj->set(i+1);
    delete pObj;
    return 0;
}
