[LC++]Pure base class as a friend

Mark Phillips mark at austrics.com.au
Fri Sep 7 15:00:07 UTC 2001


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

Thanks!  (And thanks to Lawrence Sim who suggested the same
kind of thing.)

I suspect the solution you outline is probably what I
will need to do.  The design has drawbacks, but I can't think of
a better one at the moment.

Cheers,

Mark.


> 
> 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>
> _______________________________________________
> This is the Linux C++ Programming List
> : http://lists.linux.org.au/listinfo/tuxcpprogramming List



More information about the tuxCPProgramming mailing list