Thread overview
Cast question
Jun 06, 2005
Trevor Parscal
Jun 06, 2005
Derek Parnell
Jun 06, 2005
Trevor Parscal
June 06, 2005
OK, I don't really know what to call this, but I was hoping I could do something like this

class FOO
{
	/* Members */
	public:
		int Age;

	/* Functions */
	public:
		void Test()
		{
			this.Age++;
		};
};

class BAR : FOO
{
	/* Members */
	public:
		char[] Name;

	/* Functions */
	public:
		void Test()
		{
			this.Name = "Trevor";
			this.Age++;
		};
};

and have an array of pointers to BAR classes

BAR*[] bararray;

and than have a pointer to an array of pointers to FOO classes

FOO*[]* fooarray;

and than be able to say

fooarray = &bararray;

Since BAR inherits FOO... I seem to either have done it wrong, or this is not allowed. Let me know if you have any clue as to the possiblities.

-- 
Thanks,
Trevor Parscal
www.trevorparscal.com
trevorparscal@hotmail.com
June 06, 2005
On Sun, 05 Jun 2005 22:28:15 -0700, Trevor Parscal wrote:

> OK, I don't really know what to call this, but I was hoping I could do something like this
> 
> class FOO
> {
> 	/* Members */
> 	public:
> 		int Age;
> 
> 	/* Functions */
> 	public:
> 		void Test()
> 		{
> 			this.Age++;
> 		};
> };
> 
> class BAR : FOO
> {
> 	/* Members */
> 	public:
> 		char[] Name;
> 
> 	/* Functions */
> 	public:
> 		void Test()
> 		{
> 			this.Name = "Trevor";
> 			this.Age++;
> 		};
> };
> 
> and have an array of pointers to BAR classes
> 
> BAR*[] bararray;
> 
> and than have a pointer to an array of pointers to FOO classes
> 
> FOO*[]* fooarray;
> 
> and than be able to say
> 
> fooarray = &bararray;
> 
> Since BAR inherits FOO... I seem to either have done it wrong, or this is not allowed. Let me know if you have any clue as to the possiblities.

It is just saying you can't *implicitly* cast this. You can do it explicitly though...

<code>
import std.stdio;
class FOO
{
	/* Members */
	public:
		int Age;

	/* Functions */
	public:
		void Test()
		{
			this.Age++;
			writefln("FOO age %d", Age);
		};
};

class BAR : FOO
{
	/* Members */
	public:
		char[] Name;
		this(char[] pName, int pAge) { Name = pName.dup; Age = pAge; }

	/* Functions */
	public:
		void Test()
		{
			this.Age++;
			writefln("BAR age %d, name %s", Age, Name);
		};
};

void main()
{

    BAR*[] bararray;
    FOO*[]* fooarray;


    BAR b1 = new BAR("Derek Parnell", 42);
    BAR b2 = new BAR("John Pilger", 17);
    BAR b3 = new BAR("Roger Ramjet", 95);

    bararray ~= &b1;
    bararray ~= &b2;
    bararray ~= &b3;

    // Explicit casting!
    fooarray = cast(FOO*[]*)&bararray;

    foreach( FOO* f; *fooarray)
        f.Test();
}
</code>

I run this program and get ...

BAR age 43, name Derek Parnell
BAR age 18, name John Pilger
BAR age 96, name Roger Ramjet

-- 
Derek
Melbourne, Australia
6/06/2005 4:31:01 PM
June 06, 2005
In article <1ub7h9gtbu1uw$.acnhlml4q5cz.dlg@40tude.net>, Derek Parnell says...

>
>I run this program and get ...
>
>BAR age 43, name Derek Parnell
>BAR age 18, name John Pilger
>BAR age 96, name Roger Ramjet
>

Thank you, you have helped me once again..

BTW, I got that old FreeType thing working FINALLY, so if you want to use it, let me know, otherwise, just pull it out of Terra (in an update or two)

Thanks,
Trevor Parscal