OC对象:封装、继承、多态的使用举例一
// 该代码在网上找的视频中的例子,感觉很适合类和对象分不清楚的同学参考,仅供学习分享,谢谢
// 创建一个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对象:封装、继承、多态的使用举例一的更多相关文章
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- 浅谈学习C++时用到的【封装继承多态】三个概念
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- OOP三大核心封装继承多态
OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- Objective-C 封装 继承 多态
封装 #import <Foundation/Foundation.h> @interface Person : NSObject { //@public int _age; } - (v ...
随机推荐
- sunday算法实现
这个算法比其他的kmp bm 好理解的太多,而且速度还很快. sunday思路是: 1,Sunday算法是Daniel M.Sunday于1990年提出的一种比BM算法搜索速度更快的算法. 2,S ...
- iOS_SN_深浅拷贝( 百度的)_转载
文章原地址:http://www.cnblogs.com/5ishare/p/4362459.html 深浅拷贝前提是:是实现NSCopying或者NSMutableCopying协议. 浅拷贝只是复 ...
- nodejs 简单http 文件上传demo
// 这是一个简单的Node HTTP,能处理当前目录的文件 // 并能实现良种特殊的URL用于测试 // 用http://localhost:8000 或http://127.0.0.1:8000 ...
- 发送trim值
发送寄存器和地址上的所有值 uart_send(0xa1); uart_send(*((char code*)0x2001)); uart_send(*((char code*)0x2002)); u ...
- Android studio快捷键Mac版本
为了方便大家记住这些小技巧和快捷键,我把它写成了一个插件,欢迎大家下载使用:http://chunsheng.me/EasyShortcut/ 快捷键 描述 通用------------------- ...
- 利用WSGI来部署你的网站
利用WSGI来部署你的网站 当需要部署你的django项目的时候,可以使用apache+python来部署访问你的网站. 由于网上的有关的都是老版本的.所以这里使用apache2.4和python3. ...
- ASP.NET MVC DefaultModelBinder
转载自 Leo‘s Blog 看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的 ...
- css3绘制几何图形
用css3绘制你需要的几何图形 1.圆形 示例: 思路:给任何正方形元素设置一个足够大的 border-radius ,就可以把它变成一个圆形.代码如下: html: <div class=&q ...
- [Codeforces Round #186 (Div. 2)] A. Ilya and Bank Account
A. Ilya and Bank Account time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- poj3480--John
题意:n堆石子,两人轮流操作,每次操作只能选定其中一堆,并取走若干个(>=1个).谁取走最后一个谁输.给定一个状态,问先取的赢还是后取的赢. 整个游戏反过来,如果sg为0先手必胜,不为0必败.( ...