/* returnCopyTest.cpp */
#include <iostream>

using namespace std;


class CopyTest {
  int i;
public:
  CopyTest(int);
  CopyTest& set(int i);
  void print(int i) const;
};



CopyTest::CopyTest(int i) : i(i) {
  cout << "One arg constructor: " << i << endl;
}


CopyTest& CopyTest::set(int ii) {
  i = ii;
  return *this;
}


void CopyTest::print(int i) const {
  cout << i << ": CopyTest object with data member i = " << this->i << endl;
}




CopyTest ct(11);


CopyTest f() {
  ::ct.print(1);
  return ct;
}




int main() {
  f().set(99).print(2);

  ct.print(3);

  return 0;
}
