Version 1

  1. Declarations for Car.h file:
    @property double gasLeft;
    @property int distanceTravelled;
    
    -(void) driveDistance:(int) dist;
    -(void) loadGas:(double) gas;
    
  2. Method definitions for Car.m file:
    -(void) driveDistance:(int) dist
    {
        self.distanceTravelled = self.distanceTravelled + dist;
        double gasUsed = dist/8.5;
        self.gasLeft = self.gasLeft - gasUsed;
    }
    
    -(void) loadGas:(double) gas
    {
        self.gasLeft = self.gasLeft + gas;
    }
    
  3. Test code: (place inside body of button method code)
        NSLog(@"Test code for objects");
        Car *myCar = [Car alloc];
        [myCar loadGas:50.0];
        [myCar driveDistance:10];
        NSLog(@"gas: %6.2f, distance: %d", myCar.gasLeft, myCar.distanceTravelled);
        [myCar driveDistance:94];
        [myCar loadGas:10.0];
        NSLog(@"gas: %6.2f, distance: %d", myCar.gasLeft, myCar.distanceTravelled);
    

Version 2 (readonly properties)

  1. Revised property declarations for Car.h file:
    @property(readonly) double gasLeft;
    @property(readonly) int distanceTravelled;
    
  2. Interface declaration for Car.m file (after #import statement):
    @interface Car()
    
    @property(readwrite) double gasLeft;
    @property(readwrite) int distanceTravelled;
    
    @end
    

Version 3 (distanceTravelledInMiles method)

  1. Additional declaration for Car.h file:
    -(double) distanceTravelledInMiles;
    
  2. Method definition for Car.m file:
    -(double) distanceTravelledInMiles
    {
        double miles = self.distanceTravelled*0.62;
        return miles;
    }
    
  3. Test code:
        NSLog(@"my car travelled %6.2f miles", [myCar distanceTravelledInMiles]);
    

Version 4 (initialization methods)

  1. Additional declarations for Car.h file:
    -(id) init;
    -(id) initWithGas:(double) amt;
    
  2. Method definitions for init and initWithGas (for Car.m file):
    -(id) init
    {
        self = [super init];
        _gasLeft = 0;
        _distanceTravelled = 0;
        return self;
    }
    
    -(id) initWithGas:(double) amt
    {
        self = [super init];
        _gasLeft = amt;
        _distanceTravelled = 0;
        return self;
    }
    
  3. Test code:
        Car *car2 = [[Car alloc] init];
        Car *car3 = [[Car alloc] initWithGas:20.0];
        [car3 driveDistance:15];
        // some code to print gas levels of car2 & car3
        NSLog(@"Gas left in car 2: %6.2f", [car2 gasLeft]);
        NSLog(@"Gas left in car 3: %6.2f", [car3 gasLeft]);