Previous: Introduction Up: Data Transfer Functions Next: Structures with Local Pointers

Building Transfer Functions

CC++ defines these packaging and unpackaging routines for the following types: basic integer types, float, double and global pointers. The basic integer types are: char, short, int, long, sync char, sync short, sync int, sync long and the unsigned varieties of each of these. With these building blocks, the transfer functions for other types can be defined. For instance:


class Point {
  float x_coordinate;
  float y_coordinate;
  friend CCVoid& operator<<(CCVoid&,const Point&);
  friend CCVoid& operator>>(CCVoid&,Point&);
  friend ostream& operator<<(ostream&,const Point&);
  friend istream& operator>>(istream&,Point&);
};

CCVoid& operator<<(CCVoid& v,const Point& p_out) { v << p_out.x_coordinate << p_out.y_coordinate; return v; }

ostream& operator<<(ostream& v, const Point& p_out) { v << p_out.x_coordinate << p_out.y_coordinate; return v; }

CCVoid& operator>>(CCVoid& v,Point& p_in) { v >> p_in.x_coordinate >> p_in.y_coordinate; return v; }

istream& operator>>(istream& v, Point& p_in) { v >> p_in.x_coordinate >> p_in.y_coordinate; return v; }

Notice the similarities between the data transfer functions and the input/output stream functions for class Point. The data transfer functions are declared friends of Point so that they may access the private data members of Point.

Both istream& operator>> and CCVoid& operator>> operate on an object for which memory has already been allocated and initialized. The compiler invokes the default constructor to initialize an object, and then invokes CCVoid& operator>> with the initialized object. Thus, a default constructor must be defined for each type. Like C++, CC++ will automatically generate a default constructor for a type if there is no other constructor defined for that type.

paolo@cs.caltech.edu