pragma mark 结构体作为对象属性
pragma mark 概念
pragma mark 代码
#import <Foundation/Foundation.h>
/**
合理的设计一个 学生 类
学生有 姓名 生日两个属性 和 说出自己姓名 生日 方法
要求 利用 设计学生类创建学生对象, 并说出自己的姓名和年龄
描述学生类
实物名称: 学生(Student)
属性: 姓名(name), 生日(birthday)
行为: 说出 姓名 和 生日(say)
*/
#pragma mark 类
typedef struct
{
int year;
int month;
int day;
} Date;
@interface Student : NSObject
{
@public
NSString *_name;
Date _birthday;
}
-(void)say;
@end
@implementation Student
-(void)say
{
NSLog(@"name = %@ year = %i, month = %i, day = %i, ",_name,_birthday.year,_birthday.month,_birthday.day);
}
@end
#pragma mark main函数
int main(int argc, const char * argv[])
{
// 1.创建学生对象
// 1.开辟存储空间
// 2.初始化属性
// 3.返回地址
Student *s = [Student new];
// 2.设置学生对象的属性
s->_name = @"lyh";
// 1.结构体只能在定义的时候 初始化
// 2. 系统并不清楚 它是 数组 还是结构体
// s->_birthday = {1992,4,22};
// 一次性初始化
// s->_birthday = (Date){1992,4,22};// 强制类型转换 告诉系统它说一个 结构体
// Date d = {1992,04,22}; 千万不要写成 04 因为我们保存的是二进制 如果在前面加上0 表示了八进制 那么 09 就会报错
Date d = {1992,4,22};
s->_birthday = d;
// 逐个初始化
s->_birthday.year = 1992;
s->_birthday.month = 4;
s->_birthday.day = 22;
// 3.让学生说出自己的姓名 和 生日
[s say];
#warning 结构体的本质
/*
Date d1 = {2000,1,1};
Date d2;
d2 = d1; // 本质是d1所有的属性的值 都拷贝了一份 赋值给d2;
d2.year = 2002;
printf("d1 = year = %i\n",d1.year);
printf("d2 = year = %i\n",d2.year);
*/
return 0;
}