OC基础--结构体 枚举做类成员属性

结构体  枚举作类的成员属性:

  定义一个学生类

  性别 -- 枚举

  生日 入学日期  毕业日期  --  结构体

代码示例:

声明文件 Student.h:

#import <Foundation/Foundation.h>
typedef struct {
    int year;
    int month;
    int day;
} Date;
typedef enum {
    kGenderGirl = 0,
    kGenderBoy = 1,
    kGenderChunGe = 2
} Gender; 

@interface Student : NSObject
{
    @public
    int _age;
    NSString* _name;
    Gender _gender;
    // 生日
    Date _birthday;
    // 入学时间
    Date _entranceTime;
    // 毕业时间
    Date _graduation;
}
// 自我介绍
- (void) selfIntroduce;
// 枚举值转换为性别
+ (NSString*) getGenderByEnumValue:(Gender) gender;
@end 

实现文件 Student.m:      

#import "Student.h"

@implementation Student
// 输出信息
- (void)selfIntroduce{
    // 实例方法中调用类方法
    NSString* gender = [[self class] getGenderByEnumValue:_gender];
    // 实例方法访问成员变量

    NSLog(@"大家好,我是:%@, 性别:%@, 年龄:%i, 我是 %i年%i月%i号 破壳的  上天安排我在 %i年%i月%i号 进入本校来虐死你们  哈哈  %i年%i月%i号 虐死你们后  哥就走了", _name, gender, _age, _birthday.year, _birthday.month, _birthday.day, _entranceTime.year, _entranceTime.month, _entranceTime.day, _graduation.year, _graduation.month, _graduation.day);
}
// 性别枚举值转换为字符串
+ (NSString *)getGenderByEnumValue:(Gender)gender{
    NSString* sex;
    switch (gender) {
        case 0:
            sex = @"女";
            break;
        case 1:
            sex = @"男";            break;
        case 2:
            sex = @"春哥";
            break;
        default:
            sex = @"我是妖";
            break;
    }
    return sex;
}
@end 

Main.m:                    

#import <Foundation/Foundation.h>
#import "Student.h" 

int main(int argc, const char * argv[]) {
    Student * stu = [Student new];
    stu->_name = @"小马";
    stu->_age = 30;
    stu->_gender = kGenderChunGe;
    // 结构体成员赋值  方式一
    stu->_birthday = (Date){1985, 11, 11};
    // 方式二    stu->_entranceTime.year = 2000;
    stu->_entranceTime.month = 9;
    stu->_entranceTime.day = 23;    

    // 方式三
    Date date = {.year = 2004, .month = 9, .day = 21};
    stu->_graduation = date;
    [stu selfIntroduce];   

    return 0;
} 

/*

  2015-08-27 23:58:16.727 结构体  枚举做类成员[938:44544] 大家好,我是:小马, 性别:春哥, 年龄:30, 我是 1985年11月11号 破壳的  上天安排我在 2000年9月23号 进入本校来虐死你们  哈哈  2004年9月21号 虐死你们后  哥就走了

*/

 
时间: 08-27

OC基础--结构体 枚举做类成员属性的相关文章

面向对象基础——结构体

1.结构体的语法 定义的时候需要使用关键字struct [public] struct 结构名 { public 类型名 变量名; … } 我们常见的结构体:System.Drawing.Point.Size.Color 注意: 1.结构使用时可以new,也可以不new.如果不new,则使用前必须为结构成员赋值. 2.在结构中不能为变量直接赋初值,除非const(常量).static(静态变量) 2.结构体与类 它们是 .NET Framework 中的通用类型系统的两种基本构造.两者在本质上都

OC常见结构体NSRange、NSPoint、NSSize、NSRect

NSRange:这个结构体有两个成员变量分别是location和length,比如OC字符串@"My name is HeiMa"中‘name’的NSRange为{3,4}(空格也算)C数组中{1,4,6,7,3}6.7的NSRange为{2,2} 1 // 第一种赋值方式,开发中很少用 2 NSRange range1 = {2,6}; 3 // 第二种赋值方式,依然很少用 4 NSRange range2 = {.location = 2,.length = 6}; 5 // 第三

结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

结构体中最后一个成员为[0]长度数组的用法:这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势:(1).不需要初始化,数组名直接就是所在的偏移:(2).不占任何空间,指针需要占用int长度空间,空数组不占任何空间.“这个数组不占用任何内存”,意味着这样的结构节省空间:“该数组的内存地址就和它后面的元素地址相同”,意味着无需初始化,数组名就是后面元素的地址,直接就能当指针使用. 这样的写法最适合制作动态buffer,因为可以这样分配空间malloc(sizeof(struc

C基础--结构体

C语言,结构体语法: 1.定义结构体类型: struct 结构体名称 { 成员类型 成员名称1; 成员类型 成员名称2; ... }; 例:struct Date { int year ; int month ; int day ; } 2.结构体在内存中 例一: struct Student { char *name;//指针占8个字节 int no;//int占4个字节 int age;//int占4个字节 }; struct Student s1 ; int length = sizeof

C#语言基础——结构体和枚举类型

结构体和枚举类型 一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承. 用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等.这可以节省内存,因为没有如类对象所需的那样有额外的引用产生.例如,当声明含有成千上万个对象的数组时,这会引起极大的差异. 结构体是一个变量组,将一组变量放在一起,

C++模板学习:函数模板、结构体模板、类模板

C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(int a,int b) { return a+b; } //实现了整数的相加 //如果再想同时实现小数的相加,就再多写个小数的相加.普通实现我就不写了,知道函数重载的童鞋们会这样写: int sum(int a,int b) {//第一个function return a+b;} double su

C# 结构体 枚举类型

结构体主要用于创建小型对象,例如   对象:学生  他包含:学号 姓名  性别  生日 班级   成绩等多个再小的对象 当我们有成千上万个对象组合起来   容易会自己造成混乱 而且占一定的内存 结构体就是把一个对象分支多个对象  组合起来进行计算 运行  并且不会重复运用同一个程序  把内存节省 定义: 它一般定义在Main函数外面,类Class program里面 格式: struct+结构体名称 { public   int 变量名; public   string   变量名; publi

C#基础——结构体

集合:数组:同一类型,固定长度集合:不同类型,不固定长度 要使用集合,必须先引用命名空间:using System.Collections; 定义:ArrayList arr = new ArrayList(); 赋值:arr.Add("值/变量"); //object类型object类型:所有类型的基础类型(基类) 获取个数:arr.Count; 取值:arr[索引] 插队:arr.Insert(索引,值/变量) 移除:arr.Remove(值);arr.RemoveAt(索引);

结构体 枚举类型

结构体 class Program { struct student { public int num; public string name; public string sex; public one oone; public int[] qq; } struct one { public string aa; public int bb; } static void Main(string[] args) { ////struct ////初始化结构体 //student stu = ne