黑马程序员技术交流社区

标题: 大神解答下#pragma mark - 狗类 [打印本页]

作者: 大雕会飞    时间: 2015-11-16 22:58
标题: 大神解答下#pragma mark - 狗类
字数限制没有帖全。
typedef enum
{
    kIColorBlack,
    kIColorGreen,
    kIColorBlue
}IColor;

typedef enum
{
    kSexMale,
    kSexFeMale,
    KSexYao
}Sex;

@interface Dog : NSObject
{
    @public
    IColor _color;// 颜色
    int _speed;// 速度
    Sex _sex;// 性别
    float _weight;// 体重
   
}

// 吃
- (void)eat;
// 咆哮
- (void)bark;
// 跑
- (void)run;
。。。。。。

#pragma mark - 人类
@interface Person : NSObject
{
    @public
    NSString *_name;// 名称
    Dog *_dog;// 狗 0fcc1    问题:这里为什么要这样创建???是创建一个Dog类的狗?为什么要用指针类呢?
}

// 喂狗
- (void)feedDog;
// 遛狗
- (void)liuDog;

@end

//    1.创建人对象
    Person *p = [Person new];
    p->_name = @"jack";
   
//    2.创建一条狗
    Dog *d = [Dog new];
    d->_color = kIColorBlack;
    d->_sex = KSexYao;
   
//    把狗给人
    p->_dog = d;//0fcc1把地址d给p指向的dog空间是啥意思??
   
    [p feedDog];
    [p liuDog];
    return 0;
}
作者: liury    时间: 2015-11-17 21:21
1.问题一,_dog是一个指针,只不过指向的数据不是简单的int而是一个复杂的数据块(Dog类)。此时Dog类并没有创建。可以这么理解,台式电脑生产时会预留USB接口,但是生产时没有实际的U盘也能造电脑。
2.问题二,p->dog = d;  p->_dog 和 d都是变量,这里是吧d变量的值传递给p->_dog变量。

感觉你纠结是没分清变量的地址和变量的值:
变量地址相当于门牌号,是不能修改的;变量的值是门内的东西,是可以变化的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2