OC多文件开发简单例子实现(重点:self在对象方法中调用其他对象方法的3种方法)

本文介绍了一个学生类的设计与实现过程,包括学生的属性如姓名、年龄等,以及行为方法如学习、跑步等,并展示了如何计算学生的总成绩和平均成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 2.设计一个”学生“类
 1> 属性
 * 姓名
 * 生日
 * 年龄
 * 身高(单位是m)
 * 体重(单位是kg)
 * 性别
 * C语言成绩
 * OC成绩
 * iOS成绩
 2> 行为
 * 跑步:每跑步一次,身高增加1cm,体重减小0.5kg,输出跑完后的体重
 * 吃饭:每吃一次,身高增加1cm,体重增加0.5kg,输出吃完后的体重
 * 学习:每学习一次,3可成绩各加1分,输出学习完后的3科成绩
 * 睡觉:输出所有的属性
 
 * 计算总分:算出3科成绩的总分并显示
 * 计算平均分:算出3科成绩的平均分并显示
 */

#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        Student* s1 = [Student new];
        s1->_name = @"老王";
        s1->_age = 25;
        s1->_gender = male;
        s1->_height = 1.88;
        s1->_myDate =(myDate) {1990,11,11};//强转!
        s1->_score = (Score){80.88,90.99,97.98};
        s1->_weight = 80;
        [s1 eat];
        [s1 run];
        [s1 study];
        [s1 sleep];
        float totalS2 = [s1 totalScoreOf];//记得加 s1->
        NSLog(@"老王总成绩为%.2f",totalS2);
//        float avgS2 = [s1 avgScoreOf:s1];
        float avgS2 = [s1 avgScoreOf];
        NSLog(@"老王平均成绩为%.2f",avgS2);
        NSLog(@"Be Better!");
    }
    return 0;
}
//
//  Student.h
//
//  Created by LongMa on 15/8/18.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef enum{male,female}Gender;
typedef struct
{
    int year;
    int month;
    int day;
}myDate;
typedef struct{
    float cScore;
    float OCScore;
    float iOSScore;
}Score;
@interface Student : NSObject
{
    @public
    NSString* _name;
    myDate _myDate;
    int _age;
    float _height;
    float  _weight;
    Gender _gender;
    Score _score;
}
- (void)eat;
- (void)run;
- (void)study;
- (void)sleep;
- (float)totalScoreOf;
//- (float)avgScoreOf:(Student*)p;//传对象才能调用上面的 totalScoreOf
- (float)avgScoreOf;//不传参数的话,要调用自己的方法的话,必须用 self调用!见 .m文件最后的实现方法

@end
//
//  Student.m
//
//  Created by LongMa on 15/8/18.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#import "Student.h"

@implementation Student

- (void)eat
{
    _height += 0.01f;
    _weight += 0.5f;
    NSLog(@"吃完后体重为%.2f",_weight);
}
- (void)run
{
    _height += 0.01f;
    _weight -= 0.5f;
    NSLog(@"跑步后体重为%.2f",_weight);
}
- (void)study
{
    _score.cScore += 1;
    _score.OCScore += 1;
    _score.iOSScore += 1;
    NSLog(@"学习后,c成绩为%.2f,OC成绩为%.2f,iOS成绩为%.2f",_score.cScore,_score.OCScore,_score.iOSScore);
    
}
- (void)sleep
{
    NSLog(@"%@,%@,他的生日为%i年%i月%i日,今年%d岁了。身高%.2fm,体重%.2fkg。",_name,_gender == male ? @"男" : @"女",
          _myDate.year,_myDate.month,_myDate.day,_age,_height,_weight);
    NSLog(@"他的c语言成绩为%.2f,OC成绩为%.2f,iOS成绩为%.2f",_score.cScore,_score.OCScore,_score.iOSScore);
}
- (float)totalScoreOf
{
    return _score.cScore + _score.OCScore + _score.iOSScore;
}
//- (float)avgScoreOf:(Student*)p//法1:传对象
//{
//  float totalS1 = score.cScore + score.OCScore + score.iOSScore;
//    float totalS1 = [ p totalScoreOf];
//    return (totalS1 ) / 3;
//}
- (float)avgScoreOf
{
    Student* s2 = [Student new];//法2:新建对象
    return [s2 totalScoreOf];
//    return [self totalScoreOf];//法3:不想传递对象的话,就用self
}
@end
<img src="webkit-fake-url://fd9f1be3-5acf-40d1-a348-60f73a2e422e/image.tiff" alt="" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值