OC-类的创建练习

/*
  C的函数
  int sum(int x,int y) {
       return x+y;
   }


   OC的方法
-(返回值类型)方法名1:(参数类型) 参数名; //有一个参数的方法
-(返回值类型)方法名1:(参数类型1) 参数名1 and:(参数类型2) 参数名2; //有2个参数方法
//sum---->OC的方法
-(int)sum:(int) x and:(int) y; //方法的声明

//方法的实现
-(int)sum:(int) x and:(int) y {
        return x+y;

}
 */

#import<Foundation/Foundation.h>
//写一个计算器的类,类名:Caculator  实例变量:num1,num2  行为:+ - * /
@interface Caculator:NSObject
{
   @public
   //实例变量书写规范
   int _num1;  //数据类型   _实例变量名
   int _num2;
}
//写一个没有参数的方法
-(int)sum;  //没有参数,返回值是int类型
@end

@implementation Caculator
-(int)sum{
  //计算_num1+_num2;
  return _num1+_num2;
}
@end

int main(int argc,const char * argv[]) {
    @autoreleasepool {
     Caculator *ca = [Caculator new];
     //对象访问实例变量,给实例变量赋值
     ca->_num1 = 12;
     ca->_num2 = 30;
    //调用无参方法
    int s = [ca sum];
    NSlog(@"s = %d",s);
  }
return 0;

}


有参方法声明实现及调用
思考&实现1:
类名:苹果手机(iPhone)
属性:颜色(_color),大小(_size),_cpu
行为:查看本机信息(aboutMyPhone),打电话(call),发短信(sendMessage)

实现该类,并:
1)查看本机信息
2)打电话给10086
3)给10086发短信问联通的客服电话是多少


#import<Foundation/Foundation.h>
//iPhone类的声明
typedef enum color{kColorWhite,kColorBlack,kColorTHJ} iColor;

@interface iPhone:NSObject
{
  //类的属性(实例变量,成员变量)
  iColor _color;  //手机的颜色
  float _size;    //手机的尺寸
  NSString *_cpu;  //cpu
}
  //类的行为(方法)的声明
  //查看手机的信息  实质:把手机的实例变量值打印出来
  -(void)aboutMyPhone;
  //打电话需要一个参数,参数就是电话号码(字符串)
  -(void)callPhone:(NSString *) telNum;
   //发短信,给指定号码发送短信,短信的内容可以指定
  -(void)sengMessage:(NSString *)telMum andContent:(NSString *) content;
@end

@implementation iPone
//查看手机的信息  实质:把手机的实例变量值打印出来
  -(void)aboutMyPhone {
       NSLog(@"颜色:%d,尺寸:%.2f,cpu:%@",_color,_size,_cpu);
     }

  //打电话需要一个参数,参数就是电话号码(字符串)
  -(void)callPhone:(NSString *) telNum {
        NSLog(@"给%@打电话",telNum);
     }

   //发短信,给指定号码发送短信,短信的内容可以指定
  -(void)sengMessage:(NSString *)telMum andContent:(NString *) content {
        NSLog(@"给%@发送短信,短信内容:%@.",telNum,content);
     }
@end

int main(int argc,const char * argv[]) {
   @autoreleasepool {
    //创建对象
    iPone *ipone7Plus = [iPone new];
    
    //设定手机的信息
    iPone7Plus->_color = kColorTHJ;
    iPone7Plus->_cpu = @"A20";
    iPone7Plus->_size = 7.9f;
   //调用方法
   [iPone7Plus aboutMyPhone];
    
   //给凤姐打电话
   [ipone7Plus callPhone:@"10086"];

   //给10086发短信
   [iphone7Plus sendMessage:@"10086"  andContent:@"您好,请问联通的客服电话号码是多少?"] 
  }   
return 0;
}

应用:类的创建练习
思考&实现1:
一个人可以吃不同的食物,只要吃东西就会增加体重0.6,如果要是出门遛弯,每走100步,体重减0.2,小于100步忽略不计。
请用面向对象思想实现。


思路:
类名:Person
属性:年龄(_age),体重(_weight)
动作:吃饭(eat)方法,散步(walk)方法

功能:人可以吃各种食物  
      每次散步,让体重减0.2 

#import<Foundation/Foundation.h>
//Person类的声明
@interface Person:NSObject
{
    @public
    //类的实例变量(属性,成员变量)
    NSString *_name;  //姓名
    int _age;     //年龄
    float _weight;  //体重
}
//定义人的行为
-(void)eat:(NSString *)foodName;
//walk散步
-(void)walk:(int)num;
@end

//Person类的实现
@implementation Person
-(void)eat:(NSString *)foodName {
       //吃饭以后,体重要在原来的基础上增加0.6
       _weight += 0.6f;
       NSLog(@"您吃了%@,当前体重:%.2f",foodName,_weight);
       }
//散步
-(void)walk:(int)num {
      _weight-=num/100*0.2f;
     NSLog(@"您走了%d步,当前体重为:%.2f",num,_weight);
       }
@end

int main(int argc,const char *argv[])
   @autoreleasepool {
   //创建对象
   //开空间  初始化  返回空间的首地址
   Person *p=[Person new];
   //设置对象的实例变量值
   p->_name = @"史泰龙";
   p->_weight = 180.0f;
   p->_age = 18;
   [p eat:@"四川麻辣烫"];
   [p eat:@"回锅肉"];
   [p walk:234];
}
return 0;
}

对象的存储细节
问题1.申请的空间在内存的哪个区?
new的时候申请的空间在内存的堆区(程序动态分配的内存空间)
注意:当new的时候内存的布局是这样的,初始化的时候,如果实例变量是基本数据类型,此时给初始化为0;
如果是OC类型,此时初始化为NULL

2.实例变量又保存在什么地方? 堆区   p(指针变量)存放在栈区

3.对象方法保存在什么地方?  代码区

4.为什么使用[p run];就可以调用方法?如何调用的?
 首先找到p对应的堆区的空间,然后找到_isa指针,再找到_isa指向的代码区的空间,然后到该空间中找方法

5.一个类可以创建多个对象?
又创建一个对象p1,不同对象访问的内存空间不相同
Person *p1 = [Person new]

类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独
的成员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中
占据一份存储空间,类的方法存储于此。


#import<Foundation/Foundation.h>
@interface Person:NSObject
{
   int _age;
NSString *_name;
}
-(void)run;
@end


@implementation Person
-(void)run {
  NSLog(@"人正在跑");
}
@end

int main(int argc,const char *argv[]) {
    @autoreleasepool {
     Person *p = [Person new];
     p->_name = @"柯南";
     p->_age = 13;
     NSLog(@"姓名:%@,年龄:%d",p->_name,p->_age);
     [p run];
//[Person new]做了三件事情
//1)申请内存空间
//2)给实例变量初始化
//3)返回空间的首地址
}
return 0;
}

注意:内存堆区有个指针_isa是用来存放这个对象它所处的类是哪个类


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值