obj-c编程01:第一个类和对象的范例-阿里云开发者社区

开发者社区> 大熊猫侯佩> 正文

obj-c编程01:第一个类和对象的范例

简介:
+关注继续查看
    这是obj-c学习过程中的第一篇博文,接下来还会有未知的N篇内容(关键是不知道obj-c有多难搞啊!哭),而且在以后不断的学习中,还会不断的在以前写的博文中修改和添加新的内容。在遇到暂时无法解决的问题时,我不是避而不谈,而是将问题直接写出来,希望以后得以解决,也希望各位高人看帖时哪能帮我回复解决哦。因为初次学习obj-c,开始肯定会写一些初级代码,犯一些低级错误,程序猿天赋不够,没办法啊!希望不断深入和总结吧,欢迎各位高人拍砖指点!好了言归正传,正如李纳斯所言:源代码拿来,直接上代码吧:
@interface Box:NSObject
{
	int l;
	int w;
}

-(void)print;
-(void)set_l:(int)x;	//set box.length
-(void)set_w:(int)x;	//set box.width
-(int) l;
-(int) w;
@end

@implementation Box
/*{
int l;
int w;
} 如果前面没有,则这里不能有实例变量声明吗?,否则会出错 error: inconsistent number of instance variables specified*/

-(void)print{
	NSLog(@"l:%d,w:%d",l,w);
}

-(void)set_l:(int)x{
	l=x;
}

-(void)set_w:(int)x{
	w=x;
}

-(int)l{
	return l;
}

-(int)w{
	return w;
}
@end


int main(int argc, char *argv[]){
	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
	@autoreleasepool {
		NSLog(@"hello class! :)");

		Box *box0 = [Box new];
		Box *box1 = [[Box alloc] init]; //new类方法的"分开步骤写法"

		[box0 set_l:1];
		[box0 set_w:2];

		[box1 set_l:101];
		[box1 set_w:102];

		NSLog(@"box0: l is %d , w is %d",[box0 l],[box0 w]);
		NSLog(@"box1:");
		[box1 print];
	}
	NSLog(@"Hello World!");
	[pool drain];
	return 0;
}


[2014-06-30 第1次添加内容:定制对象的init方法]:

为了更好地初始化对象的变量,为什么不在对象init方法中就对其变量赋值呢?当然可以哦,以下是修改过的A类,在其添加了新的init:(int)方法,并且重载了原有的方法。在新的init:(int)方法中,我们首先要调用父类中的init方法,在其成功后(返回非nil值),才做自己初始化,另外注意init返回的都是id变量:

#import <Foundation/Foundation.h>

@interface A:NSObject
	@property int i;
	-(void)set_i:(int)i;
	-(void)print;
	-(id)init:(int)x;
@end

@implementation A{
	int i;
}
	@synthesize i;

	-(void)set_i:(int)i_v{
		i = i_v;
	}

	-(void)print{
		NSLog(@"[class A][i:%d]:hello!",i);
	}

	-(id)init:(int)x{
		self = [super init];
		if(self){
			[self set_i:x];
		}
		return self;
	}

	-(id)init{
		return [self init:0];
	}
@end


@interface B:A{
	int j;
}
	@property int j;
@end

@implementation B
	@synthesize j;

	-(void)print{
		NSLog(@"[class B:A][i:%d,j:%d]hello!",self.i,j);
	}
@end

int main(int argc,char *argv[])
{
	@autoreleasepool{
		NSLog(@"hello obj-c!");
		A *a = [[A alloc] init:100];
		B *b = [[B alloc] init:200];

		//a.i = 101;
		//b.i = 1001;
		//[a set_i:99];
		//[b set_i:199];
		//b.j = 1002;

		[a print];
		[b print];
	}
	return 0;
}

注意,obj-c中的#import和C中的#include类似,不同的是#import保证只加载一次h文件哦。@开头的字面值称为obj-c的关键字,为了和C代码冲突最小化,遂在开头加上字符@。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一起谈.NET技术,对抽象编程:接口和抽象类
  1. 引言   在我之前的一篇post 《抽象类和接口的谁是谁非 》中,和同事管伟的讨论,得到很多朋友的关注,因为是不成体系的论道,所以给大家了解造成不便,同时关于这个主题的系统性理论,我认为也有必要做以总结,因此才有了本篇的新鲜出炉。
764 0
C#编程-120:文件选择之OpenFileDialog控件
C#编程-120:文件选择之OpenFileDialog控件
18 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
12069 0
《21天学通Java(第6版)》—— 1.3 对象和类
面向对象编程是基于现实世界的情况进行建模的,对象由多种更小的对象构成。
1271 0
Kotlin语法(类和对象)
二、类和对象: 1. 类定义: 类的声明包含类名,类头(指定类型参数,主构造函数等等),以及类主体,用大括号包裹。类头和类体是可选的;如果没有类体可以省略大括号。 class Invoice{ } 2. 构造函数: 在 Kotlin 中类可以有一个主构造函数以及多个二级构造函数。
740 0
Python面向对象编程05:收尾总结一下类和对象
正式的Python专栏第40篇,同学站住,别错过这个从0开始的文章!
19 0
Python面向对象编程01:入门类和对象
正式的Python专栏第36篇,同学站住,别错过这个从0开始的文章!
11 0
+关注
大熊猫侯佩
贪吃贪睡的大熊猫侯佩
689
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载