类名: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; //散步 -(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{ //每走100步 体重减去 0.2 //234步 0.4 = 0.2*2 //num / 100 *0.2f; _weight -= num/100 *0.2f; NSLog(@"您走了%d步,当前体重为:%.2f",num,_weight); } @end int main(int argc, const char * argv[]) { @autoreleasepool { //创建对象 //[Person new]; //开空间 初始化 返回空间的首地址 Person *p = [Person new]; //设置对象的实例变量的值 p->_name = @"史泰龙"; p->_weight = 180.0f; p->_age = 18; [p eat:@"四川麻辣烫"]; [p eat:@"回锅肉"]; [p walk:888]; } return 0; }
2015-07-16 11:27:19.429 02-应用:类的创建练习[679:33008] 您吃了四川麻辣烫,当前体重:180.60 2015-07-16 11:27:19.429 02-应用:类的创建练习[679:33008] 您吃了回锅肉,当前体重:181.20 2015-07-16 11:27:19.430 02-应用:类的创建练习[679:33008] 您走了888步,当前体重为:179.60
【掌握】03-对象的存储细节
1、申请的空间在内存的哪个区? 2、实例变量又保存在什么地方 3、对象方法保存在什么地方 4、为什么使用 [p run]; 就可以调用方法了 ?如何调用的 5、一个类可以创建多个对象
栈区(对象指针在这) 内存堆区(创建的对象在这,实例变量在这) 内存代码区(包含方法的基本信息,调用到的方法在这),这几个区是分开的
#import <Foundation/Foundation.h> @interface Person : NSObject { @public int _age; float _weight; 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; //_age 0 //_name null NSLog(@"姓名:%@,年龄:%d,体重:%f",p->_name,p->_age,p->_weight); [p run]; //[Person new] 做了3件事情 // 1) 申请内存空间 // 2)给实例变量初始化 // 3) 返回空间的首地址 //1、申请的空间在内存的哪个区? // new 的时候申请的空间在内存的堆区(程序动态分配的内存空间) // 当new的时候内存的布局是这么样的 //初始化的时候: //如果实例变量是基本数据类型,此时给初始化为0 //如果 。。。。OC字符串类型 null //2、实例变量又保存在什么地方 // 堆区 // p(指针变量) 存放在栈区 //3、对象方法保存在什么地方 // 代码区 //4、为什么使用 [p run]; 就可以调用方法了 ?如何调用的 // 首先找p对应的堆区的空间,然后找到 _isa指针,再找到_isa指向的 //代码区的空间,然后到该空间中找 方法 //5、一个类可以创建多个对象 //又创建了一个对象p1 Person *p1 = [Person new]; p1->_name = @"贝娜"; p1->_age = 33; NSLog(@"姓名:%@,年龄:%d,体重:%f",p1->_name,p1->_age,p1->_weight); [p1 run]; } return 0; }
2015-07-16 11:56:04.569 03-对象的存储细节[699:38284] 姓名:柯南,年龄:13,体重:0.000000 2015-07-16 11:56:04.570 03-对象的存储细节[699:38284] 人正在跑 2015-07-16 11:56:04.570 03-对象的存储细节[699:38284] 姓名:贝娜,年龄:33,体重:0.000000 //体重是没有赋值的,所以就根据类型默认值 2015-07-16 11:56:04.570 03-对象的存储细节[699:38284] 人正在跑
时间: 2024-10-03 11:12:42