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代码冲突最小化,遂在开头加上字符@。
obj-c编程01:第一个类和对象的范例的更多相关文章
- JAVA入门第二季 第一章 类和对象
面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- OC第一节 —— 类和对象
一.类和对象的概念 1.1类 自己的定义: 具有相同或相似性质对象的抽象. 1.2 对象 自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机 等均可以看做是对象. 举例说明: 类 ...
- java面向对象编程——第四章 类和对象
OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启 ...
- Scala 编程(二)类和对象
类,字段和方法 类是对象的蓝图.一旦定义了类,就可以用关键字new从类的蓝图里创建对象,类的定义: class ChecksumAccumulator { // class definition go ...
- Java入门第二季第一章类和对象知识点
Java 中的 static 使用之静态方法 1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员.如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问 ...
- 《Java入门第二季》第一章 类和对象
什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件. 2.局部变量:在类的方法中,用于临时保存数据. ...
- Linux - 简明Shell编程01 - 第一个脚本(HelloShell)
脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash echo "hell ...
- scala编程(四)——类和对象
类,字段和方法 在scala里定义一个典型的类,代码如下: class ChecksumAccumulator { private var sum = 0 def add(b: Byte): Uni ...
随机推荐
- 【Unity Shaders】Unity里的雾效模拟
写在前面 熟悉Unity的都知道,Unity可以进行基本的雾效模拟.所谓雾效,就是在远离我们视角的方向上,物体看起来像被蒙上了某种颜色(通常是灰色).这种技术的实现实际上非常简单,就是根据物体距离摄像 ...
- Objc中为何某些类的属性要设置为copy而不是strong?
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不知道大家是否注意,我们再使用一些第三方类的时候大多数情况下对 ...
- Servlet编程实例-servlet学习之旅(三)
LoginServlet代码: public class LoginServlet extends HttpServlet{ @Override protected void service(Http ...
- UE4实现描边效果
描边效果属于常见常用的功能,现VR项目中,也需要射线选中一个物体,使物体高亮. 于是在网上找了部分资料,同时也感谢群里的一位大神的提点,总算将描边的功能实现了,这里也写一个简单的示例步骤. 1.我并不 ...
- 最简单的基于FFmpeg的封装格式处理:视音频分离器(demuxer)
===================================================== 最简单的基于FFmpeg的封装格式处理系列文章列表: 最简单的基于FFmpeg的封装格式处理 ...
- 初次见面 你好EF
EF(yif),第一次听到这个名字的时候,以为是一个帅帅的魔术师,在小编的傻傻的梦想里,就是有一天,有一个魔术师站在小编面前,变出一大捧的玫瑰花,然后,然后不要钱`(*∩_∩*)′,然而在我们的编程世 ...
- 1025. PAT Ranking (25)
题目如下: Programming Ability Test (PAT) is organized by the College of Computer Science and Technology ...
- Spark Streaming + Flume整合官网文档阅读及运行示例
1,基于Flume的Push模式(Flume-style Push-based Approach) Flume被用于在Flume agents之间推送数据.在这种方式下,Spark Stre ...
- UNIX环境高级编程——时间和日期
由UNIX内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数.这种秒数是以数据类型time_t表示. 1. time函数返回当前时间和日期: tim ...
- 华为机试题【13】-wave数组找字母游戏
题目描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你 ...