/*
CS371p: Quiz #21 (5 pts)
*/

/* -----------------------------------------------------------------------
1. Define class A such that the following program works.
   (4 pts)
*/

#include <cassert> // assert

class A {
    friend void f (A& r) {
        ++r._i;}

    private:
        int _i;

    public:
        A (int i) :
                _i (i)
            {}

        static void g (A& r) {
            ++r._i;}

        operator int () {
            return _i;}

        void h () {
            ++_i;}};

int main () {
    A x(2);
    assert(x == 2);

    f(x);
    assert(x == 3);

    A::g(x);
    assert(x == 4);

    x.h();
    assert(x == 5);

    return 0;}


syntax highlighted by Code2HTML, v. 0.9.1