Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   Type conversion function for user defined type... (http://www.velocityreviews.com/forums/t506872-type-conversion-function-for-user-defined-type.html)

 zaeminkr@gmail.com 05-16-2007 07:50 AM

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*()?

 Sylvester Hesp 05-16-2007 09:00 AM

Re: Type conversion function for user defined type...

<zaeminkr@gmail.com> wrote in message
>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

 All times are GMT. The time now is 10:12 AM.