oop tutorials

Jesse Phillips jessekphillips at gmail.com
Thu Mar 6 22:38:04 PST 2008


On Fri, 07 Mar 2008 07:11:48 +0100, Saaa wrote:

>>    auto store = new Bike[10];
>>    store[] = new Bike(null);
> 
> Would anything change if I would replace those two lines with:
> 
> Bike[10] store;
> 
> (It compiles, runs and outputs the same)
> 
> Because I read those two lines as:
>> Allocate memory for 10 bikes
>> free the memory

umm, yes. The first line is allocating the memory to store Bikes on to 
the heap. Your suggested line will do the same, but on the stack.

Where the problem comes is if you remove the second line. Here's a 
modification to show that. Try it with and without the line, I'll explain 
below.

class Bike {
    Human owner;
    char[] type;

    this(Human o, char[] t) {
         owner = o;
         type = t;
    }
    public void newOwner(Human o) {
         owner = o;
    }
    public void ride() {
         writefln("riding his new %s bike", type);
    }
}

class Human {
    Bike bike;
    char[] name;

public:
   this(char[] n) { name = n; }

    void ride() {
         if(bike !is null) {
             writef("%s is", name);
             bike.ride();
         }
    }

    void purchase(Bike b) {
         b.newOwner(this);
         bike = b;
    }
}

void main() {
    Bike[10] store;
    store[] = new Bike(null, "street");

    Human joe = new Human("Joe");
    joe.ride();

    // Joe buys a new bike
    joe.purchase(store[4]);
}

assuming I didn't mess up again, if you try to run it without the second 
line in main you should get either a segfault as I don't recall D having 
the nullPointerExceptions. Anyway, the second line is filling the array 
of Bike with instances of Bike. You may want to try but I don't think it 
will work.

Bike[10] store = new Bike(null, "street);


More information about the Digitalmars-d-learn mailing list