张超超OC基础回顾03_结构体类型作为成员变量的特殊用法
直接上例子:
要求: 合理的设计一个”学生“类
学生有* 姓名* 生日两个属性和说出自己姓名生日方法
要求利用设计的学生类创建学生对象,并说出自己的姓名和年龄
描述学生类
事物名称: 学生(Student)
属性:姓名(name), 生日(birthday)
行为:说出字节姓名和生日(say)
typedef struct { int year; int month; int day; } Date;
@interface Student : NSObject
{
@public NSString *_name; // 姓名 Date _birthday; // 结构体类型的成员变量 }
- (void)say;
@end
实现的时候,注意结构体方法的特殊用法,要求给结构体属性赋值,并且实现下面的say方法
@implementation Student
- (void)say
{
NSLog(@"name = %@; year = %i, month = %i, day = %i", _name, _birthday.year, _birthday.month, _birthday.day);
} @end
写一个主要的main函数来实现上述的声明和实现
int main(int argc, const char * argv[]) {
// 1.创建学生对象
// 1.开辟存储空间
// 2.初始化属性
// 3.返回地址
Student *stu = [Student new]; // 2.设置学生对象的属性
stu->_name = @"lnj";
// 1.结构体只能在定义的时候初始化
// 2.系统并不清楚它是数组还是结构体
// 所以下面的方法是会告警的,不能这么直接赋值的
stu->_birthday = {1986, 1, 15};
//初始化结构体属性,解决办法:
//方法一:强制转换,这样相当于copy了一份之前定义的Date结构体,然后在定义这个新的结构体的时候给它赋值为{1986,1,15}
stu->_birthday = (Date){, , }; //方法二:定义一个新的结构体,给d赋值,将d赋值给_birthday,这个和方法一一样,只不过是分为了两步来执行了。
Date d = {, , };
stu->_birthday = d; //方法三:分别赋值
// stu->_birthday.year = 1986;
// stu->_birthday.month = 1;
// stu->_birthday.day = 15; // 3.让学生说出自己的姓名和生日
[stu say]; /*
Date d1 = {1999, 1, 5};
Date d2;
d2 = d1; // 本质是将d1所有的属性的值都拷贝了一份赋值给d; d2.year = 2000;
printf("d1 = year = %i\n", d1.year);
printf("d2 = year = %i\n", d2.year);
*/ return ;
}
张超超OC基础回顾03_结构体类型作为成员变量的特殊用法的更多相关文章
- 张超超OC基础回顾01_类的创建,申明属性,以及本质
一. 类的声明和实现&规则 1.如何编写类的声明 以@interface开头 , 以@end结尾, 然后再class name对应的地方写上 事物名称, 也就是类名即可 注意: 类名的首字符必 ...
- 张超超OC基础回顾04_实例变量修饰(@public),点语法,self关键字,多态,继承
零.实例变量修饰符 /* @public 就是实例变量修饰符 @public >可以在其它类中访问被public修饰的成员变量 >也可以在本类中访问被public修饰的成员变量 >可 ...
- 张超超OC基础回顾_05 property修饰符,id类型,instancetype。。。
一.property 如果给一个属性同时提供了getter/setter方法, 那么我们称这个属性为可读可写属性 如果只提供了getter方法, 那么我们称这个属性为只读属性 如果只提供了setter ...
- 张超超OC基础回顾02_成员变量(属性),局部变量,全局变量的区别
成员变量: 写在类声明的大括号中的变量, 我们称之为 成员变量(属性, 实例变量) 成员变量只能通过对象来访问 注意: 成员变量不能离开类, 离开类之后就不是成员变量 成员变量不能在定义的同时进行初始 ...
- OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改
OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改,需要对OC对象的结构体属性整体赋值. 关于网上很多博客写着“结构体类型里面的某个属性如果想要修改是不允许单个修改的” 之解释: ...
- 在C语言结构体中添加成员函数
我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...
- 自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}
一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct St ...
- oc温习七:结构体与枚举
结构体和枚举都是一种存储复杂的数据.结构体是用户自定义的一种类型,不同类型的集合. 1.结构体的创建及使用 定义结构体类型 struct MyDate { int year; int month; i ...
- Go语言基础六:结构体和方法
结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...
随机推荐
- SlowHTTPTest-慢速DoS攻击
Slowhttptest是一个依赖于实际HTTP协议的Slow HTTP DoS攻击工具,它的设计原理是要求服务器所有请求被完全接收后再进行处理. SlowHTTPTest是一款对服务器进行慢攻击的测 ...
- phpcms v9 tags调用方法
{loop $keywords $keyword} <a href="{APP_PATH}index.php?m=content&c=tag&catid={$catid ...
- Doxygen详细介绍
1 序言 为代码写注释一直是大多数程序员有些困扰的事情.当前程序员都能接受为了程序的可维护性.可读性编码的同时写注释的说法,但对哪些地方应该写注释,注释如何写,写多少等这些问题,很多程序员仍然没有答案 ...
- 布局类,让多个div在一行显示
原文链接:http://www.divcss5.com/wenji/w472.shtml
- Ambari client
在研究如何修改YARN的资源池的时候,发现了Hortwork在github上面开源了一个Ambari Client: https://github.com/apache/ambari/tree/tru ...
- php://input解决APP发送图片问题
今天公司要求用APP发送一个图片到PHP程序接收并保存起来,而且中间还需要很多参数! 以前没有做过APP和PHP交互,这次算是一个挑战吧(对一个没有人指导实习生来说) 1.APP发1.jpg,而且带有 ...
- selenium - 三种元素等待
1.sleep 休眠方法 sleep()由python的time模块提供. 当执行到sleep()方法时,脚本会定时休眠所设置的时长,sleep()方法默认参数是s(秒),sleep(2) 表示休眠2 ...
- WinForm Flicker闪屏解决方案
开发WinForm 程序时经常会遇到闪屏的问题,这会给用户造成很差的使用体验,所以必须妥善解决好这个问题. 首先,我们先要找出闪屏的原因,就我目前遇到的问题而言,其原因真是五花八门. 主要的原因有:使 ...
- CentOS7上部署https
目前很多浏览器都加强了html都安全性,要求配置https. 下面都例子是在CentOS7上的Apache配置https都过程. 一.生成证书 用OpenSSL生成key和证书: mkdir /etc ...
- 第13章 Spring框架的设计理念与设计模式分析
13.1 Spring的骨骼架构 最核心的组件是:Core, Context, Bean. 13.1.1 Spring的设计理念 Spring最核心的组件是Bean组件.Spring解决的最关键的问题 ...