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 ...
随机推荐
- Windows上C语言实现设置控制台的颜色
这里设置只要调用system();这个函数就行了,参数是字符串,想要设置终端的颜色,按照以下格式可以设置: //数字表示前景色,字母表示背景色 //color 0=黑色 1蓝色 2 绿色 3湖蓝色 4 ...
- Android打包遇到的那些坑
说说今天打包遇到的坑,由于线上有个支付的bug需要紧急修复,而我们的项目又没有使用热修复,所以只能通过编译打包等传统流程,还好android上线比较快. 说说我进早上打包遇到的几个问题吧,首先我使用b ...
- java操作XML文件--读取内容
先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类 由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...
- 收藏了4年的Android 源码分享
Android 超过2个G的源代码集合~~几乎涵盖了所有功能效果的实现,一应俱全~~应有尽有~~ 360云盘地址:Android 各类源码集合汇总 (提取码:f930) 另外,附上Github上及自己 ...
- tomcat如何路由映射网址
对于web容器来说,根据请求客户端路径路由到对应的资源属于其核心功能,假设用户在自己电脑上使用浏览器输入网址http://www.test.com/test/index.jsp,报文通过互联网网络到达 ...
- Socket接收器——Acceptor
Acceptor是JIoEndpoint的内部类,主要的职责就是监听是否有客户端套接字连接并接收socket,再将socket交由任务执行者(Executor)执行.不断从系统底层读取socket,接 ...
- UNIX网络编程——TCP长连接与短连接的区别
一.TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server发送消息,server回应client,然后 ...
- 【一天一道LeetCode】#117. Populating Next Right Pointers in Each Node II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...
- Java-IO之ByteArrayInputStream
ByteArrayInputStream是字节数组输入流,继承于InputStream.它包含了一个内部缓冲区,该缓冲区包含从流中读取的字节,其实内部缓冲区就是一个字节数组,而ByteArrayInp ...