-(id) init
{
self = [super init]
if (self) {
operand1 = [[Fraction alloc] init];
operand2 = [[Fraction alloc] init];
accumulator = [[Fraction alloc] init];
}
return self;
}
首先,为什么要覆写从NSObject继承来的init方法?因为不覆写直接用父类的init方法初始化时,无法初始化Calculator类中的三个实例变量(因为这三个实例变量也是引用类型,同样需要初始化),所以要在一个方法中同时完成Calculator自身及其包含的引用类型的初始化。
关于self = [super init]; 1、为什么要对父类初始化? 2、为什么可以这么赋值?
1、“初始化“实际是对自身包含的数据成员进行初始化,父类的初始化方法必然是可以初始化父类所包含的数据成员,因为子类的数据成员范围大于父类,所以先确保父类被初始化了再初始化子类中的数据成员;
2、因为子类的实例名(指针)可以引用(指向)父类的实例(指针所指向的内容)
都是自己揣测的,欢迎拍砖
对了,还有一点不明,为啥返回的是id类型呢?为啥不是 Calculator * 呢?