黑马程序员_OC_类和对象
来源:互联网 发布:北京胡同旅馆知乎 编辑:程序博客网 时间:2024/05/16 09:06
一.面向对象和面向过程的思想(对比)
OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想
1. 面向对象和面向过程的区别
1) 以用电脑听歌为例子
a) 面向过程
Ø 打开电脑
Ø 播放电脑中的歌曲
Ø 关闭电脑
b) 面向对象(不是相亲的“对象”)
Ø 电脑
开机
播放歌曲
关机
区别分析
面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象
二.类和对象关系
面向对象中有2个非常重要的概念:类和对象
1. 如何创建对象
1) 面向对象解决问题的时候必须有对象,那如何创建对象呢?
2) 现实生活的例子:如何创造汽车对象?
a) 需要先有汽车的建造图纸,图纸上描述清楚汽车应该具备的属性和功能(行为)
Ø 属性:轮子数、时速
Ø 功能(行为):跑
b) 然后再根据图纸上的描述生成汽车
c) 每一辆汽车都是对象,都有自己具体的属性值,都是图纸的实例
d) 图纸是抽象的,房子是具体的。图纸是对房子对象的高度概括
2. OC中的面相对象
1) OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类
2) OC利用类来创建对象,对象是类的具体存在
因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象三.声明和定义类及方法的调用
类名:Car
属性:轮胎个数、时速(速度)
行为:跑
// 因为使用了NSObject
#import <Foundation/Foundation.h>
// 完整地写一个函数:函数的声明和定义(实现)
// 完整地写一个类:类的声明和实现
// 1.类的声明
// 声明对象的属性、行为
// : NSObject 目的是:让Car这个类具备创建对象的能力
@interface Car : NSObject
{//用来声明对象属性(实例变量\成员变量,默认会初始化为0)
// @public可以让外部的指针间接访问对象内部的成员变量
@public
int wheels;// 轮胎个数
int speed;//时速(xxkm/h)
}
// 方法(行为):方法名、参数、返回值(声明、实现)
// 只要是OC对象的方法,必须以减号 -开头
// OC方法中任何数据类型都必须用小括号()扩住
// OC方法中的小括号():括住数据类型
- (void)run;
@end
// 2.类的实现
// 用来实现@inteface中声明的方法
@implementation Car
// 方法的实现(说清楚方法里面有什么代码)
- (void)run
{
NSLog(@"车子跑起来了");
}
@end
int main()
{
//在OC中,想执行一些行为,就写上一个中括号[行为执行者行为名称]
//利用类来创建对象
//执行了Car这个类的new行为来创建新对象
//定义了一个指针变量p,p将来指向的是Car类型的对象
// [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)
Car *p = [Car new];
Car *p2 = [Car new];
p2->wheels =5;
p2->speed =300;
[p2 run];
// 给p所指向对象的wheels属性赋值
p->wheels =4;
p->speed =250;
//给p所指向对象发送一条run消息
[p run];
NSLog(@"车子有%d个轮子,时速位:%dkm/h", p->wheels, p2->speed);
return0;
}
*.注意错误
方法
1.对象方法都是以减号 -
2.对象方法的声明必须写在@interface和@end之间
对象方法的实现必须写在@implementation和@end之间
3.对象方法只能由对象来调用
4.对象方法归类\对象所有
函数
1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有
2.函数调用不依赖于对象
3.函数内部不能直接通过成员变量名访问某个对象的成员变量
@interface Car : NSObject
{//成员变量\实例变量
//int wheels = 4; 不允许在这里初始化
//static int wheels; 不能随便将成员变量当做C语言中的变量来使用
@public
int wheels;
}
- (void)run;
- (void)fly;
@end
四.方法及实现
#import <Foundation/Foundation.h>
计算器类
方法:
1> 返回 π
2> 计算某个整数的平方
3> 计算两个整数的和
@interface JiSuanQi : NSObject
// 方法名:pi
- (double)pi;
// OC方法中,一个参数对应一个冒号
// 方法名:pingFang:(冒号也是方法名的一部分)
- (int)pingFang:(int)num;
//- (int)sum:(int)num1 :(int)num2;
// 方法名:sumWithNum1:andNum2:
- (int)sumWithNum1:(int)num1 andNum2:(int)num2;
//- (int)sumWithNum1:(int)num1 andNum2:(int)num2 andNum3:(int)num3;
@end
@implementation JiSuanQi
- (double)pi
{
return3.14;
}
- (int)pingFang:(int)num
{
return num * num;
}
//- (int)sum:(int)num1 :(int)num2
- (int)sumWithNum1:(int)num1 andNum2:(int)num2
{
return num1 + num2;
}
@end
int main()
{
JiSuanQi *jsq = [JiSuanQi new];
int a = [jsq sumWithNum1:20 andNum2:5];
//int a = [jsq sum:10 :5];
//int a = [jsq pingFang:10];
//double a = [jsq pi];
NSLog(@"%i", a);
return0;
}
五.匿名对象
@interface Car : NSObject
{
@public
int speed;
}
- (void)run;
@end
@implementation Car
- (void)run
{
NSLog(@"速度为%d的车子跑起来了", speed);
}
@end
int main()
{
Car *c;
c = [Car new];
c->speed = 250;
[c run];
//不要写类似匿名对象这样的代码
//只要求能说出输出结果
[Car new]->speed =300;
[[Car new] run];
Car *c = [Car new];
return0;
}
- 黑马程序员_OC_类和对象
- 黑马程序员_OC_核心语法
- 黑马程序员_OC_内存管理
- 黑马程序员_OC_第一个类,@property和@synthesize,Category,description方法
- 黑马程序员_OC_封装,继承,多态
- 黑马程序员_OC_基本概念及语法
- 黑马程序员_OC_封装.继承.多态
- 黑马程序员------类和对象
- 黑马程序员:类和对象
- 黑马程序员------类和对象
- 黑马程序员_.NET类和对象
- 黑马程序员---OC类和对象
- 黑马程序员---Objective-C 类和对象
- 黑马程序员---02类和对象
- 黑马程序员------[Objective-C]类和对象
- 黑马程序员-------------面向对象和类
- 黑马程序员--OC类和对象
- 黑马程序员-OC语言-类和对象
- 《读书与做人》 有德有学有才
- 网络视频码率和分辨率
- HBase Java简单示例
- Mantle 初步使用 JSON<->OBJECT
- 14.4立体类族共有的抽象类
- 黑马程序员_OC_类和对象
- 向postgis导入shapefile数据(转自:John Larry的万维空间)
- android 体系结构
- 【C++学习】Cat 2.0
- java.text.DecimalFormat 格式化数据的显示效果:补全小数点后的位数、三位一个逗号分割、四舍五入
- href
- CListCtrl列表框添加与更改图标
- 阿里负责人揭秘面试潜规则
- Java实验5继承和多态