[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