[LC++]Pure base class as a friend

Carlo Wood carlo at alinoe.com
Fri Sep 7 14:09:07 UTC 2001


I don't like the design really, but when I had this problem I'd
probably do this:

class Point {
friend class Manipulator;
private:
  int x, y;
  //...
};

class Manipulator {
protected:
  void set_x(Point &p, int x) { p.x = x; }
  void set_y(Point &p, int y) { p.y = y; }
  int get_x(Point &p) { return p.x; }
  int get_y(Point &p) { return p.y; }
  // ...
};

class SomeManipulator : public Manipulator {
public:
  void swap_points(Point &p1, Point &p2)
  {
    int x = get_x(p1);
    int y = get_y(p1);
    set_x(p1, get_x(p2));
    set_y(p1, get_y(p2));
    set_x(p2, x);
    set_y(p2, y);
  }
};

That any class derived from Manipulator has access
to all and any Point, but no other classes do.

On Fri, Sep 07, 2001 at 12:50:54PM +0930, Mark Phillips wrote:
> Hi,
> 
> Suppose I have a class "pointTy" which stores a point on a sphere.  And
> suppose I have a pure base class "manipulatorTy" which allows the
> manipulation of these points.  The idea is that there might be various
> different types of manipulation, expressed via derived classes from this
> base class.  What I would like to be able to do, is say manipulatorTy
> is a friend of pointTy.  So that any manipulator would be able to
> change private members of pointTy.  But my understanding is that
> only the base class would be a friend of pointTy.  Any classes derived
> from manipulatorTy would not be friends unless they were each explicitly
> declared friend (which is not a good idea).  Am I right about this?
> 
> At the moment, the only way around my dilemma is to change some of the
> pointTy private members into public members.  But I'd prefer not to do
> this if I can.
> 
> I could make manipulatorTy a derivation of pointTy, and make the
> internals of pointTy "protected", but this won't work because I want
> manipulators to be able to work on more than one point, and to change
> the points they are working on.
> 
> Any ideas?
> 
> Cheers,
> 
> Mark.
> _______________________________________________
> This is the Linux C++ Programming List
> : http://lists.linux.org.au/listinfo/tuxcpprogramming List

-- 
Carlo Wood <carlo at alinoe.com>



More information about the tuxCPProgramming mailing list