// 该代码在网上找的视频中的例子,感觉很适合类和对象分不清楚的同学参考,仅供学习分享,谢谢

// 创建一个Pointtest类,用属性x、y表示点的坐标位置,求两点之间的距离,使用两种方法:类方法和对象方法

#import <Foundation/Foundation.h>

#import <math.h> // 要使用到开方和求平方根两个函数,pow和sqrt,所以对该头文件进行声明

// 声明类的属性和方法

@interface Pointtest : NSObject

{

double _x; // 设置x坐标
    double _y; // 设置y坐标

}

// 设置x的setter和getter方法,基础较好的同学应该知道这是啥东西吧

- (void)setX:(double)x;

- (double)x;

// 设置y的setter和getter方法,基础较好的同学应该知道这是啥东西吧

- (void)setY:(double)y;

- (double)y;

// 设置同时获取x、y值,为什么还要设置一次呢?因为封装的思想:隐藏对象的属性和实现细节

- (void)setX:(double)x andY:(double)y;

// 写一个对象方法,来计算该点对象与其他点对象的距离

- (double)distanceWithOther:(Pointtest *)other;

//写一个类方法,来计算2个点对象之间的距离

+ (double)distanceBetweenPoint1:(Pointtest *)p1 andPoint2:(Pointtest *)p2;

@end

// 实现

@implementation Pointtest

// 设置x的setter和getter方法,基础较好的同学应该知道这是啥东西吧

- (void)setX:(double)x

{

// 可以在这里添加判断语句或是其他算法来达到封装效果

_x = x;

}

- (double)x

{

return _x;

}

// 设置y的setter和getter方法,基础较好的同学应该知道这是啥东西吧

- (void)setY:(double)y

{

// 可以在这里添加判断语句或是其他算法来达到封装效果

_y = y;

}

- (double)y

{

return _y;

}

// 设置同时获取x、y值,为什么还要设置一次呢?因为封装的思想:隐藏对象的属性和实现细节

- (void)setX:(double)x andY:(double)y

{

// 直接使用创建对象本身的方法来调用设置,这样就不用管里面的方法是怎样实现的了,封装的目的就达到了

[self setX:x];
    [self setY:y];

}

// 写一个对象方法,来计算该点对象与其他点对象的距离

- (double)distanceWithOther:(Pointtest *)other

{

// 两点间距离的计算公式:((x1-x2)平方 + (y1-y2)平方)平方根

double x1 = [self x];

double x2 = [other x];

double y1 = [self y];

double y2 = [other y];

double powX = x1-x2;

double powY = y1-y2;

double powSum = pow(powX,2)+pow(powY,2);

return sqrt(powSum); // 这里写太细了   o.0

}

//写一个类方法,来计算2个点对象之间的距离

+ (double)distanceBetweenPoint1:(Pointtest *)p1 andPoint2:(Pointtest *)p2

{

// 这里理解很重要,这里是用对象方法实现的

return [p1 distanceWithOther:p2];

}

@end

// 主函数

int main()

{

// 创建一个点(13,10)

Pointtest *d1 = [Pointtest new];

[d1 setX:13 andY:10]; // 不用单个的去设了

// 创建一个点(10,14)

Pointtest *d2 = [Pointtest new];

[d2 setX:10 andY:14];

// 调用对象方法

double distance1 = [d1 distanceWithOther:d2];
    
//调用类方法

double distance2 = [Pointtest distanceBetweenPoint1:d1 andPoint2:d2];

NSLog(@"对象方法算出的结果%f,类方法算出的结果%f",distance1,distance2);

return 0;

}

OC对象:封装、继承、多态的使用举例一的更多相关文章

  1. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  2. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  3. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  4. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  5. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

  6. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  7. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  8. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  9. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  10. Objective-C 封装 继承 多态

    封装 #import <Foundation/Foundation.h> @interface Person : NSObject { //@public int _age; } - (v ...

随机推荐

  1. jsp笔记,包括编译指令和动作指令,九大对象等

    jsp基础知识 不包括HTTP协议,只有jsp的基础知识,包括表达式,代码片段,jsp九大对象等. 编译指令是在jsp被转换成selvet时,使用的. 而动作指令,是在每次客户端请求时动态执行.

  2. servlet 中字符集的处理

    Servlet运行的步骤 Servlet作为Web服务器的补充功能在运行时需要受到Servlet容器的管理,其运行的流程如下: 浏览器依据IP建立与容器的连接 浏览器将请求数据打包 容器解析请求数据包 ...

  3. 【干货】.NET开发通用组件发布(一) 介绍

    组件介绍 集合个人和团都开发中遇到的一些通用组件,邮件发送组件.内容采集.CSV数据文件导入工具.日志记录组件.MVC验证登陆组件.MVC分页组件.短信发送组件和强大的Repeate和Repeater ...

  4. CSS选择器4是下一代CSS选择器规范

    那么,这一版本的新东西有哪些呢? 选择器配置文件 CSS选择器分为两类:快速选择器和完整选择器.快速选择器适用于动态CSS引擎.完整选择器适用于速度不占关键因素的情况,例如document.query ...

  5. Python爬虫学习:一、相关概念与基础知识

    爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽 ...

  6. python保留两位小数

    python保留两位小数: In [1]: a = 5.026 In [2]: b = 5.000 In [3]: round(a,2) Out[3]: 5.03 In [4]: round(b,2) ...

  7. 小试牛刀——爬topit.me的图片,附github简易上传教程

    接触了scrapy ,发现爬虫效率高了许多,借鉴大神们的文章,做了一个爬虫练练手: 我的环境是:Ubuntu14.04 + python 2.7 + scrapy 0.24 目标 topit.me 一 ...

  8. CloudStack cloud数据库op_host_capacity表type与控制板上的内容的对应关系

    listCapacity: type 名称 0 内存 1 CPU 3 主存储 4 公用IP地址 5 管理类IP地址 6 辅助存储 7 VLAN 9 本地存储 ViewResponseHelper.ja ...

  9. java中byte数组与int类型的转换(两种方式)

    http://blog.csdn.net/z69183787/article/details/38564219 http://blog.csdn.net/z69183787/article/detai ...

  10. mysql Event、存储过程、表命令

    Mysql事件调度器(Event Scheduler)类似于定时器,可以在某一个时间点执行一个SQL语句或一个语句块(BEGIN ... END):或者每隔固定间隔重复执行.类似于Linux下的cro ...