文章都是先由本人个人博客:孙占兴:www.teilim.com,先更新,随后CSDN博客才会更新,掌握第一动态请关注本人主站。

原文链接:http://www.teilim.com/objective-cmian-xiang-dui-xiang-pian-dui-xiang-he-lei/

因学校(课设、放假)和自身(学车、买票)的事情。拖了两周没履行诺言。被我就可以爱又卖萌的师父(言肆酱)发现,才想起来要写博文了。陆续把近期自学的分篇总结,写的不错给予指正,相互学习。碎碎念结束~

对象和类的介绍

对象:是对客观事物的抽象,对象是类的实例。

类:则是对象的抽象,类是一种抽象的数据类型(类似int、double、float等基本数据类型)。

打个例如。现实生活中的车分为非常多种,(如汽车、卡车、自行车、bus等),他们是存在的,而车则是它们整体的抽象的概述。他们统称都能够称作为车。

类的声明和实现

类的声明:用来声明对象的属性和行为。

@interface Car {
@public
int _wheels; //Car轮子属性
int _speed; //Car速度属性
NSString *_color; //Car颜色属性
}
@end

在以上代码中,@interface代表Car类的声明。而@end则表示Car类声明的结束,而在括号里的代码为类声明对象的属性(成员变量)。

类的实现

@implementer Car: NSObject
@end

在以上代码中,@implementer
Car
代表Car类的实现,而@end则表示Car类实现的结束。Car:
NSObject
是Car继承NSObject。在后面的博文中会介绍。

对象的创建

首先,我先说一下对象和类在下Xcode中的声明和实现。如今代码演示一下。

#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
Car *bike = [[Car alloc]init];
Car *bus = [[Car alloc]init];
Car *taix = [[Car alloc]init];
return 0 ;
}

在这三行代码中的alloc为在Car类型中分别给(bike、bus、taix)指针所指向的对象各分配一块内存空间。并创建_ wheels,_ speed, *_color属性。

而init将为(bike、bus、taix)所指向的对象的属性进行初始化。

(也能够理解bike等是Car的对象)。

成员变量的直接赋值

#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
Car *bike = [[Car alloc]init];
bike->_wheels = 2;
bike->_speed = 20;
bike->_colour = @"红色";
NSlog(@"自行车的轮子有%d个,自行车的速度为%d km/h,自行车的颜色为%@",bike->_wheels,bike->_speed,bike->_colour);
return 0;
}

在(bike->_ wheels = 2; bike->_ speed = 20; bike->_ colour = @"红色";)代码中,我让bike对象,间接的訪问Car类型中对对象声明的属性并把它们复制(须要在声明代码中➕@pubilc。由于他们的成员变量是被保护的,在后期学类的三大属性的封装后,便不再这样去操作)。

所以NSlog(@"自行车的轮子有%d个,自行车的速度为%d
km/h,自行车的颜色 为%@",bike->_wheels,bike->_speed,bike->_colour);
将为系统打印出你在代码中所设置的属性,此处须要用手操作,方可得出结论~

对象的方法声明、实现和调用。

方法声明

Objective-C中的方法类大体似函数。相同具有:方法名、參数、返回值类型。

@interface Car {
@public
int _wheels; //Car轮子属性
int _speed; //Car速度属性
NSString *_color; //Car颜色属性
}
- (void) run;
@end

上面代码中的-
(void) run;
是Objective-C中对象方法必须以"-"开头。(void)必须用括号括住。

方法实现

@implementer Car: NSObject
- (void) run
{
NSlog(@“速度为%d的bike跑起来了!!!",_speed);
}
@end

方法调用

#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
Car *bike = [[Car alloc]init];
[bike run];
return 0 ;
}

代码中[bike
run];
[A B] A方法执行者。B方法。所以此代码理解为:bike指针对象中发送run消息(消息机制)。执行一下,看看会输出什么东西 ^_^。

匿名对象

个人理解:没有名字的对象。

#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
[[Car alloc]init]->_spped = 100;
[[[Car alloc]init]run];
return 0 ;
}

在上述代码[[Car
alloc]init]->_spped = 100;
中。在Car类中创建并初始化一个对象,而且直接訪问该对象中的_ speed成员变量。并直接复制为100。而并没有指定某一个对象来进行此操作。[[[Car
alloc]init]run];
而此代码,给我们直观的角度时调用run方法。事实上却不是我们的想要的结果300,而是0!原因是此时我们又又一次创建而且初始化还有一个对象,而这个对象的本身的_
speed的成员变量为0,和之前的我们所复制的300没有关系,原因非常easy,它们两个并非同一个对象,所以互不影响。所以第二个代码中调用的run方法,输出的结果会是0~

Objective-C面向对象-对象和类的更多相关文章

  1. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  2. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

  3. java面向对象编程(类、对象)

    一.面向对象编程概述面向对象编程(Object  Oriented  Programming,缩写为OOP)是当今最流行的程序设计技术,它具有代码易于维护.可扩展性好和代码可常用等优点.面向对象的设计 ...

  4. Python面向对象中的类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1.1 类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统 ...

  5. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  6. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

  7. 2016/3/21 面向对象: ①定义类 ②实例化对象 ③$this关键字 ④构造函数 ⑤析构函数 ⑥封装 ⑦继承

    一:定义类   二:实例化对象 //定义类 class Ren { var $name; var $sex; var $age; function Say() { echo "{$this- ...

  8. 一.OC基础之:1,OC语言的前世今生 ,2,OC语言入门,3,OC语言与C的差异,4,面向对象,5,类和对象的抽象关系,6,类的代码创建,7,类的成员组成及访问

    1,OC语言的前世今生 , 一, 在20世纪80年代早期,布莱德.麦克(Brad Cox)设计了OC语言,它在C语言的基础上增加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象 ...

  9. day21——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版

    day21 面向对象的初识 面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类. 想要学习面向对象必须站在一个上帝的角度去分析考虑问题. 类: 具有相同属性和功能的一类事物. 对 ...

随机推荐

  1. SQLite Database Browser 2.0使用方法

    在网上找一个SQLITE查看器 这个查看器叫做:www.jb51.net/database/118822.html 这个查看器可以新建SQLITE文件数据库,可以建立表索引,写SQL语句,编辑表数据 ...

  2. IPy模块--IP地址处理

    Python之实用的IP地址处理模块IPy 实用的IP地址处理模块IPy 在IP地址规划中,涉及到计算大量的IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 别担心,Ipy模块拯救你.Ipy ...

  3. 【LeetCode】Combination Sum(组合总和)

    这道题是LeetCode里的第39道题. 题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组 ...

  4. HDU——1045Fire Net(最大匹配)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. SPOJ GSS1 Can you answer these queries I ——线段树

    [题目分析] 线段树裸题. 注意update的操作,写结构体里好方便. 嗯,没了. [代码] #include <cstdio> #include <cstring> #inc ...

  6. 洛谷 [P2734] 游戏

    博弈论+区间dp 有博弈论吗?大约只有一个博弈论的壳子 设 dp[i][j] 表示区间 i ~ j 先手最多能取多少, 它可以由 i ~ j - 1 与 i + 1 ~ j 来转移, 等于上述两个区间 ...

  7. ci框架——辅助函数

    辅助函数:application/helper下面.命名要求为***_helper.php;这样在调用的时候直接$this->load->helper('***');若想给自定义的辅助函数 ...

  8. Yii2之创建定时任务

    yii开发的项目需要使用定时任务其实也可以使用一些单独的脚本文件来完成,但若是定时任务代码中需要使用到项目中的一些类,特别是需要使用应用对象Yii::$app的时候,单独的脚本想要完成就比较麻烦了.这 ...

  9. 用“道”的思想解决费用流问题---取/不取皆是取 (有下界->有上界) / ACdreamoj 1171

    题意: 给一个矩阵,给出约束:i(0<i<n)行至少去ai个数,j行至少取bi个数,要求取的数值之和最小. 开始一见,就直接建了二分图,但是,发现这是有下界无上界最小费用流问题,肿么办.. ...

  10. Codeforces 486D Valid Sets (树型DP)

    题目链接 Valid Sets 题目要求我们在一棵树上计符合条件的连通块的个数. 满足该连通块内,点的权值极差小于等于d 树的点数满足 n <= 2000 首先我们先不管这个限制条件,也就是先考 ...