面向对象 - 对象作为方法的参数传递

本文探讨了面向对象编程中一个常见但关键的概念:对象作为方法参数时,实际上传递的是对象的引用或指针。这意味着在方法内部对对象的修改将直接影响到原始对象的状态,而非创建副本。这种机制对于理解和优化代码性能至关重要。

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

当对象作为方法传递的时候传递的是对象的指针

#import <Foundation/Foundation.h>
#pragma mark - 定义一个图书类
@interface Book : NSObject
{
    NSString *_name;    // 书名
    int _pageNum;        // 书的页数
}

- (void)setName:(NSString *)name;
- (void)setPageNum:(int)pageNum;

- (NSString *)name;
- (int)pageNum;
@end


#pragma mark - 定义一个人类
@interface Person : NSObject
{
    NSString *_name;    // 姓名
    int _age;           // 年龄
    double _height;     // 身高
};


// setter
- (void)setName:(NSString *)name;
- (void)setAge:(int)age;
- (void)setHeight:(double)height;

// getter
- (NSString *)name;
- (int)age;
- (double)height;

// 输出个人信息
- (void)printInfo;

// 读书
- (void)readBook:(Book *)bk;
@end




#pragma mark - 程序入口
int main(int argc, const char * argv[]) {
    
    // 实例化一个人对象
    Person *person = [Person new];
    [person setName:@"张三"];
    [person setAge:18];
    [person setHeight:1.8];
    
    // 实例化书类
    Book *book = [Book new];
    [book setName:@"oc入门到精通"];
    [book setPageNum:200];
     
     // 调用人person对象的readBook方法,将Book的对象 book 进行传递
     [person readBook:book];    // 张三 正在读oc入门到精通书,一共200页
    
    return 0;
}

#pragma mark - 实现一个人类
@implementation Person

- (void)printInfo {
    NSLog(@"姓名: %@ 年龄: %i 身高: %lf", _name, _age, _height);
}

// setter
- (void)setName:(NSString *)name {
    _name = name;
}
- (void)setAge:(int)age {
    _age = age;
}
- (void)setHeight:(double)height {
    _height = height;
}

// getter
- (NSString *)name {
    return _name;
}
- (int)age {
    return _age;
}
- (double)height {
    return _height;
}

- (void)readBook:(Book)bk {
    NSLog(@"%@ 正在读%@书,一共%i页", _name, [bk name], [bk pageNum]);
}

@end

#pragma mark - 实现书类
@implementation Book

- (void)setName:(NSString *)name {
    _name = name;
}
- (void)setPageNum:(int)pageNum {
    _pageNum = pageNum;
}

- (NSString *)name {
    return _name;
}
- (int)pageNum {
    return _pageNum;
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值