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

  1. @interface Box:NSObject
  2. {
  3. int l;
  4. int w;
  5. }
  6.  
  7. -(void)print;
  8. -(void)set_l:(int)x; //set box.length
  9. -(void)set_w:(int)x; //set box.width
  10. -(int) l;
  11. -(int) w;
  12. @end
  13.  
  14. @implementation Box
  1. /*{
  1. int l;
  1. int w;
  1. } 如果前面没有,则这里不能有实例变量声明吗?,否则会出错 error: inconsistent number of instance variables specified*/
  2.  
  3. -(void)print{
  4. NSLog(@"l:%d,w:%d",l,w);
  5. }
  6.  
  7. -(void)set_l:(int)x{
  8. l=x;
  9. }
  10.  
  11. -(void)set_w:(int)x{
  12. w=x;
  13. }
  14.  
  15. -(int)l{
  16. return l;
  17. }
  18.  
  19. -(int)w{
  20. return w;
  21. }
  22. @end
  23.  
  24. int main(int argc, char *argv[]){
  25. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  26. @autoreleasepool {
  27. NSLog(@"hello class! :)");
  28.  
  29. Box *box0 = [Box new];
  30. Box *box1 = [[Box alloc] init]; //new类方法的"分开步骤写法"
  31.  
  32. [box0 set_l:1];
  33. [box0 set_w:2];
  34.  
  35. [box1 set_l:101];
  36. [box1 set_w:102];
  37.  
  38. NSLog(@"box0: l is %d , w is %d",[box0 l],[box0 w]);
  39. NSLog(@"box1:");
  40. [box1 print];
  41. }
  42. NSLog(@"Hello World!");
  43. [pool drain];
  44. return 0;
  45. }

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

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

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface A:NSObject
  4. @property int i;
  5. -(void)set_i:(int)i;
  6. -(void)print;
  7. -(id)init:(int)x;
  8. @end
  9.  
  10. @implementation A{
  11. int i;
  12. }
  13. @synthesize i;
  14.  
  15. -(void)set_i:(int)i_v{
  16. i = i_v;
  17. }
  18.  
  19. -(void)print{
  20. NSLog(@"[class A][i:%d]:hello!",i);
  21. }
  22.  
  23. -(id)init:(int)x{
  24. self = [super init];
  25. if(self){
  26. [self set_i:x];
  27. }
  28. return self;
  29. }
  30.  
  31. -(id)init{
  32. return [self init:0];
  33. }
  34. @end
  35.  
  36. @interface B:A{
  37. int j;
  38. }
  39. @property int j;
  40. @end
  41.  
  42. @implementation B
  43. @synthesize j;
  44.  
  45. -(void)print{
  46. NSLog(@"[class B:A][i:%d,j:%d]hello!",self.i,j);
  47. }
  48. @end
  49.  
  50. int main(int argc,char *argv[])
  51. {
  52. @autoreleasepool{
  53. NSLog(@"hello obj-c!");
  54. A *a = [[A alloc] init:100];
  55. B *b = [[B alloc] init:200];
  56.  
  57. //a.i = 101;
  58. //b.i = 1001;
  59. //[a set_i:99];
  60. //[b set_i:199];
  61. //b.j = 1002;
  62.  
  63. [a print];
  64. [b print];
  65. }
  66. return 0;
  67. }

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

obj-c编程01:第一个类和对象的范例的更多相关文章

  1. JAVA入门第二季 第一章 类和对象

    面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...

  2. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  3. OC第一节 —— 类和对象

    一.类和对象的概念 1.1类 自己的定义: 具有相同或相似性质对象的抽象. 1.2 对象 自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机 等均可以看做是对象. 举例说明: 类 ...

  4. java面向对象编程——第四章 类和对象

    OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启 ...

  5. Scala 编程(二)类和对象

    类,字段和方法 类是对象的蓝图.一旦定义了类,就可以用关键字new从类的蓝图里创建对象,类的定义: class ChecksumAccumulator { // class definition go ...

  6. Java入门第二季第一章类和对象知识点

    Java 中的 static 使用之静态方法 1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员.如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问 ...

  7. 《Java入门第二季》第一章 类和对象

    什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件. 2.局部变量:在类的方法中,用于临时保存数据. ...

  8. Linux - 简明Shell编程01 - 第一个脚本(HelloShell)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash echo "hell ...

  9. scala编程(四)——类和对象

     类,字段和方法 在scala里定义一个典型的类,代码如下: class ChecksumAccumulator { private var sum = 0 def add(b: Byte): Uni ...

随机推荐

  1. 【Unity Shaders】Unity里的雾效模拟

    写在前面 熟悉Unity的都知道,Unity可以进行基本的雾效模拟.所谓雾效,就是在远离我们视角的方向上,物体看起来像被蒙上了某种颜色(通常是灰色).这种技术的实现实际上非常简单,就是根据物体距离摄像 ...

  2. Objc中为何某些类的属性要设置为copy而不是strong?

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不知道大家是否注意,我们再使用一些第三方类的时候大多数情况下对 ...

  3. Servlet编程实例-servlet学习之旅(三)

    LoginServlet代码: public class LoginServlet extends HttpServlet{ @Override protected void service(Http ...

  4. UE4实现描边效果

    描边效果属于常见常用的功能,现VR项目中,也需要射线选中一个物体,使物体高亮. 于是在网上找了部分资料,同时也感谢群里的一位大神的提点,总算将描边的功能实现了,这里也写一个简单的示例步骤. 1.我并不 ...

  5. 最简单的基于FFmpeg的封装格式处理:视音频分离器(demuxer)

    ===================================================== 最简单的基于FFmpeg的封装格式处理系列文章列表: 最简单的基于FFmpeg的封装格式处理 ...

  6. 初次见面 你好EF

    EF(yif),第一次听到这个名字的时候,以为是一个帅帅的魔术师,在小编的傻傻的梦想里,就是有一天,有一个魔术师站在小编面前,变出一大捧的玫瑰花,然后,然后不要钱`(*∩_∩*)′,然而在我们的编程世 ...

  7. 1025. PAT Ranking (25)

    题目如下: Programming Ability Test (PAT) is organized by the College of Computer Science and Technology ...

  8. Spark Streaming + Flume整合官网文档阅读及运行示例

    1,基于Flume的Push模式(Flume-style Push-based Approach)      Flume被用于在Flume agents之间推送数据.在这种方式下,Spark Stre ...

  9. UNIX环境高级编程——时间和日期

    由UNIX内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数.这种秒数是以数据类型time_t表示. 1.     time函数返回当前时间和日期: tim ...

  10. 华为机试题【13】-wave数组找字母游戏

    题目描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你 ...