oc中,在一个类中组合了另一个类,那另一个类的成员变量如何直接调用?

时间:2021-02-19 20:04:39


@interface figure : NSObject
@property float height;
@property int weight;
@property int handLength;
@implementation figure
@end

@interface person : NSObject
{
    figure *shencai;
}
@property int age;

@end

@implementation person

@end

int main(int argc, const char * argv[])

{
    person *p =[person new];
    p.age = 10;
    p->shencai.height = 180;//疑问就在这里
//我想既然组合之后person类的对象包扩了figure的所有成员变量和方法,
//那我应该可以直接访问给他赋值啊。。。可是这样的方法是错误的?
//那到底组合之后,person类创立的对象有没有开辟内存给figure的成员变量?
//它在内存里面到底是怎么分配的啊  ,正确的访问方法是什么??

    return 0;
}

1 个解决方案

#1


这是C语言区,不光有C++的,怎么OC都来了。。
不是写OC的,不过这样貌似可以
#import <Foundation/Foundation.h>

@interface figure : NSObject
@property float height;
@property int weight;
@property int handLength;
@end

@implementation figure
@end

@interface person : NSObject
@property figure *shencai;
@property int age;
@end

@implementation person
@end


int main(int argc, const char * argv[])
{

    @autoreleasepool {
        person *p = [person new];
        
        p.shencai = [figure new];
        
        p.age = 10;
        p.shencai.height = 123;
        
        NSLog(@"%f\n", p.shencai.height);
    }
    return 0;
}

#1


这是C语言区,不光有C++的,怎么OC都来了。。
不是写OC的,不过这样貌似可以
#import <Foundation/Foundation.h>

@interface figure : NSObject
@property float height;
@property int weight;
@property int handLength;
@end

@implementation figure
@end

@interface person : NSObject
@property figure *shencai;
@property int age;
@end

@implementation person
@end


int main(int argc, const char * argv[])
{

    @autoreleasepool {
        person *p = [person new];
        
        p.shencai = [figure new];
        
        p.age = 10;
        p.shencai.height = 123;
        
        NSLog(@"%f\n", p.shencai.height);
    }
    return 0;
}