[LC++]Pure base class as a friend

Jan Reimers reimers at infoserve.net
Mon Sep 10 02:31:05 UTC 2001


Mark,
    Can you classify the sorts operations a manipulator would do?  For example:

class Manipulator
{
  public:

  private:
    void Rotate(Point&,double Angle) const;
    void Translate(Point&, double DeltaX, double DeltaY) const;
// etc.
}

These sorts of operations don't make any reference to how a point is
represented.  So if you decide to use a polar coordinate representation your
manipulator interface will still remain useful.


Jan

Mark Phillips wrote:

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




More information about the tuxCPProgramming mailing list