首页 > 代码库 > 【OC学习-10】写一个复数相加的例子来谈谈OC的self是什么意思?
【OC学习-10】写一个复数相加的例子来谈谈OC的self是什么意思?
OC的self相当于C++里面的this吧。一般都是隐形的,就是不写出来的。其实就是自己的意思,谁调用就说的是谁,那么super呢?就是父类,谁调用那么就是谁的父类。
建一个Complex的类。
(1)在Complex.h里
#import <Foundation/Foundation.h> @interface Complex : NSObject //只声明属性,没有写实例变量 @property(nonatomic) double real; @property(nonatomic) double imag; //初始化函数 -(id)initWithReal:(double)aReal Imag:(double)aImag; //复数的加法函数 -(Complex *)add:(Complex *)aSecond; @end
(2)在Complex.m里
#import "Complex.h" @implementation Complex //别忘记和@property配套的@synthesize @synthesize real,imag; //初始化函数 -(id)initWithReal:(double)aReal Imag:(double)aImag{ if (self=[super init]) { self.real=aReal; self.imag=aImag; } return self; } //复数的加法函数,函数返回值是复数,只需要一个参数,还有一个参数实际上就是self自身 -(Complex *)add:(Complex *)aSecond{ //这里创建一个新的复数,而不是用+=操作,是因为+=会改变原先的数值,不是最好方法 Complex * result=[[Complex alloc]init]; //这里的self就是谁调用就是谁,即某一个复数 result.real=self.real+aSecond.real; result.imag=self.imag+aSecond.imag; return result; } @end
(3)在main.m里
#import <Foundation/Foundation.h> #import "Complex.h" //记得导入头文件 int main(int argc, const char * argv[]) { @autoreleasepool { //实例化并初始化复数 Complex * a=[[Complex alloc]initWithReal:1 Imag:3]; Complex * b=[[Complex alloc]initWithReal:4 Imag:2]; //add是一个方法,所以用[a add]调用,并传递一个b参数 Complex * c=[a add:b]; NSLog(@"%g+%gi",c.real,c.imag); } return 0; }
返回结果:
5+5i
由于新版的xcode里面ARC功能,大白话就是:程序员只管写alloc,而不需要写release和auturelease,因为它自动处理了,所以代码更简洁。当然,练习的时候可以把这个ARC功能关闭。
【OC学习-10】写一个复数相加的例子来谈谈OC的self是什么意思?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。