File: BNRStockHolding.h
[code]#import <Foundation/Foundation.h>
@interface BNRStockHolding : NSObject
@property (nonatomic) float purchaseSharePrice;
@property (nonatomic) float currentSharePrice;
@property (nonatomic) int numberOfShares;
- (float)costInDollars; // purchaseSharePrice * numberOfShares
- (float)valueInDollars; // currentSharePrice * numberOfShares
@end[/code]
File: BNRStockHolding.m
[code]#import “BNRStockHolding.h”
@implementation BNRStockHolding
-
(float)costInDollars
{
// using compiler generated accessors
// without accessing explicitly the ivars// purchaseSharePrice * numberOfShares
return [self purchaseSharePrice] * [self numberOfShares];
} -
(float)valueInDollars
{
// currentSharePrice * numberOfShares
return [self currentSharePrice] * [self numberOfShares];
}
@end
[/code]
File: BNRForeignStockHolding.h
[code]#import <Foundation/Foundation.h>
#import “BNRStockHolding.h”
@interface BNRForeignStockHolding : BNRStockHolding
@property (nonatomic) float conversionRate;
@end[/code]
File: BNRForeignStockHolding.m
[code]#import “BNRForeignStockHolding.h”
@implementation BNRForeignStockHolding
-
(float)costInDollars
{
// using compiler generated accessors
// without accessing explicitly the ivars// purchaseSharePrice * numberOfShares
return (([super purchaseSharePrice] * [self conversionRate]) * [super numberOfShares]);
} -
(float)valueInDollars
{
// currentSharePrice * numberOfShares
return (([super currentSharePrice] * [self conversionRate]) * [super numberOfShares]);
}
@end[/code]
File: main.m
[code]#import <Foundation/Foundation.h>
#import “BNRStockHolding.h”
#import “BNRForeignStockHolding.h”
int main(int argc, const char * argv[])
{
@autoreleasepool {
// Challenge
BNRStockHolding *stock1 = [[BNRStockHolding alloc] init];
BNRStockHolding *stock2 = [[BNRStockHolding alloc] init];
BNRStockHolding *stock3 = [[BNRStockHolding alloc] init];
[stock1 setPurchaseSharePrice:2.30];
[stock1 setCurrentSharePrice:4.50];
[stock1 setNumberOfShares:40];
[stock2 setPurchaseSharePrice:12.19];
[stock2 setCurrentSharePrice:10.56];
[stock2 setNumberOfShares:90];
[stock3 setPurchaseSharePrice:45.10];
[stock3 setCurrentSharePrice:49.51];
[stock3 setNumberOfShares:210];
BNRForeignStockHolding *fs1 = [[BNRForeignStockHolding alloc] init];
fs1.purchaseSharePrice = 2.30;
fs1.currentSharePrice = 4.50;
fs1.numberOfShares = 40;
fs1.conversionRate = 11.0;
NSMutableArray *stockHolding = [[NSMutableArray alloc] initWithObjects:stock1, stock2, stock3, fs1, nil];
for (BNRStockHolding *s in stockHolding) {
NSLog(@"\n --Stock-- \nPurchase price: %.2f$ \nCurrent price: %.2f$ \nNumber of Shares: %i \nCost in dollars: %.2f$ \nValue in dollars: %.2f$", s.purchaseSharePrice, s.currentSharePrice, s.numberOfShares, s.costInDollars, s.valueInDollars);
}
// Log for conversionRate property
NSLog(@"\nConversion rate (by local currency): %.2f$", fs1.conversionRate);
}
return 0;
}
[/code]
Output:
2014-08-22 01:00:49.731 Stocks[1077:303]
–Stock–
Purchase price: 2.30$
Current price: 4.50$
Number of Shares: 40
Cost in dollars: 92.00$
Value in dollars: 180.00$
2014-08-22 01:00:49.733 Stocks[1077:303]
–Stock–
Purchase price: 12.19$
Current price: 10.56$
Number of Shares: 90
Cost in dollars: 1097.10$
Value in dollars: 950.40$
2014-08-22 01:00:49.733 Stocks[1077:303]
–Stock–
Purchase price: 45.10$
Current price: 49.51$
Number of Shares: 210
Cost in dollars: 9471.00$
Value in dollars: 10397.10$
2014-08-22 01:00:49.733 Stocks[1077:303]
–Stock–
Purchase price: 2.30$
Current price: 4.50$
Number of Shares: 40
Cost in dollars: 1012.00$
Value in dollars: 1980.00$
2014-08-22 01:00:49.734 Stocks[1077:303]
Conversion rate (by local currency): 11.00$
Program ended with exit code: 0
Any suggestion will be appreciated.
Regards.,