f



Type conversion function for user defined type...

I have a question about type conversion function for user defined
type.

I have two classes

class DRect
{
private :
   double x0;
   double y0;
   double x1;
   double y1;
public :
   DRect(double a, double b, double c, double d) : x0(a), y0(b),
x1(c), y1(d) {}
   void Union(DRect* p)
   {
      x0 = MIN(x0, p->x0);
      y0 = MIN(y0, p->y0);
      x1 = MAX(x1, p->x1);
      y1 = MAX(y1, p->y1);
   }
}

class IRect
{
private :
   int x0;
   int y0;
   int x1;
   int y1;
public :
   IRect(int a, int b, int c, int d) : x0(a), y0(b), x1(c), y1(d) {}
}


And I want to do something like this.

{
   DRect d(3.4, 2.6, 19.2, 93.2);
   IRect i(10, 10, 100, 100);

   d.Union(i);
   // or
   d.Union(&i)
}


Is it possible to make a such type conversion fuction -
IRect::operator DRect() or IRect::operator DRect*()?

Thanks in advance.

0
zaeminkr (9)
5/16/2007 7:50:34 AM
comp.lang.c++ 49423 articles. 7 followers. Post Follow

1 Replies
553 Views

Similar Articles

[PageSpeed] 47

<zaeminkr@gmail.com> wrote in message 
news:1179301834.835559.212730@n59g2000hsh.googlegroups.com...
>I have a question about type conversion function for user defined
> type.
>
> I have two classes
>
> class DRect
> {
> private :
>   double x0;
>   double y0;
>   double x1;
>   double y1;
> public :
>   DRect(double a, double b, double c, double d) : x0(a), y0(b),
> x1(c), y1(d) {}
>   void Union(DRect* p)

You want to accept a const DRect here, as you're not interested in changing 
it (and therefore you don't need the restriction of the passed DRect being 
non-const). You probably also want to accept a reference rather than a 
pointer - passing 0 is pretty pointless (no pun intended ;)), and it makes 
the use of the class a lot easier (no need for the & everywhere, plus you 
can pass temporaries and such)


> And I want to do something like this.
>
> {
>   DRect d(3.4, 2.6, 19.2, 93.2);
>   IRect i(10, 10, 100, 100);
>
>   d.Union(i);
>   // or
>   d.Union(&i)
> }
>
>
> Is it possible to make a such type conversion fuction -
> IRect::operator DRect() or IRect::operator DRect*()?

Of course, but you obviously already know the syntax, so what's the problem?
class IRect
{
    // ...
public:
    operator DRect() const { return DRect(x0, y0, x1, y1); }
};

Now you can use d.Union(i);

- Sylvester 


0
s.hesp (116)
5/16/2007 9:00:47 AM
Reply: