结构体作为对象的属性

//  结构体作为对象的属性
/*
 合理的设计一个”学生“类
 学生有* 姓名* 生日两个属性和说出自己姓名生日方法
 要求利用设计的学生类创建学生对象,并说出自己的姓名和年龄
 
 描述学生类
 
 事物名称: 学生(Student)
 属性:姓名(name), 生日(birthday)
 行为:说出字节姓名和生日(say)
 */
#import <Foundation/Foundation.h>

//typedef <#existing#> <#new#>;
typedef struct { // 省略结构体名称,起别名
    int year;
    int month;
    int day;
} Date;

@interface Student : NSObject
{
    @public
    NSString *_name;
    Date _date;
}
- (void)say;
@end

@implementation Student

- (void)say{
//    NSLog(@"我的名字是%@,我的生日是:%i年%i月%i日",_name,_date->year,_date->month,_date->day);
    //member reference type'Date' is not a pointer;maybe you meant to use '.'?
//    为什么会犯这样的错误?把常规的访问结构体内部和指针方式访问搞混了
//    通过指针访问结构体需要定义一个结构体的指针然后取得结构体的地址然后赋值
    NSLog(@"我的名字是%@,我的生日是:%i年%i月%i日",_name,_date.year,_date.month,_date.day);
}

@end

int main(int argc, const char * argv[]) {
//    创建学生对象
    Student *ps = [Student new];
//    初始化学生对象
    ps->_name=@"草泥马";
    
//    初始化对象的结构体属性三种方法
//    1⃣️
//    ps->_date=(Date){1991,10,11};
//    2⃣️
//    Date date={1990,1,1};
//    ps->_date=date;
//    3⃣️
    ps->_date.year=1989;
    ps->_date.month=3;
    ps->_date.day=3;
    
//    调用自己说的方法
    [ps say];
    
    return 0;
}
原文地址:https://www.cnblogs.com/imChay/p/5590218.html