A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 桑托尔 中级黑马   /  2014-4-28 15:36  /  1379 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 桑托尔 于 2014-4-30 09:39 编辑

关于init初始化问题,如果想在学生这个类里面重写init,让每个新建出来的学生类初始化的age都是10,可以有如下代码
  1. //在学生类的.m文件中
  2. -(id)init
  3. {
  4.       if ( self = [super init] )
  5.       {
  6.             _age = 10;
  7.       }
  8.       return self;
  9. }
复制代码

那么如果我想初始化学号 _no呢,同时希望每调用一次init,都会令学号 +=1,应该怎么做到不想用initWithNo这种,就是想在init运行中,每次自动加1赋值给新的no成员变量

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

3 个回复

倒序浏览
  1. -(id)init
  2. {
  3.     static int age = 0;  //对象销毁时,值不会改变。
  4.     if ( self = [super init] )
  5.     {
  6.         age++;
  7.         _age = age;
  8.     }
  9.     return self;
  10. }
复制代码

  1. int main(int argc, const char * argv[])
  2. {
  3.     Student *stu1 = [[Student alloc] init];
  4.     Student *stu2 = [[Student alloc] init];
  5.     Student *stu3 = [[Student alloc] init];
  6.     NSLog(@"age %i", stu1.no); //age 1
  7.     NSLog(@"age %i", stu3.no); //age 3   初始化一次 年龄增加一次
  8.     return 0;
  9. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
  1. -(id)init
  2. {
  3.     static int number = 0;
  4.     if ( self = [super init] )
  5.     {
  6.         _age = 10;
  7.         _number = ++number;
  8.     }
  9.     return self;
  10. }
复制代码

希望有更好的方法能实现,我是用一个静态变量来实现的。
回复 使用道具 举报 2 0
每次实例化对象,都重新赋值的成员,基本上就是静态成员了吧,就像上面两位兄弟写的一样。或者可以试试判断当前Student对象的个数,根据已存在的对象个数来给no成员赋值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马