Objective-C—方法与成员变量、匿名对象

---方法与成员变量

/*
 人
 类名:Person
 属性:(成员变量\实例变量):体重、年龄
 行为:(方法):走路、吃
*/

/*
1.类的声明
    *成员变量
    *方法的声明

2.类的实现
*/
#import<Foundation/Foundation.h>

//1.类的声明

@interface Person: NSObject
        
{   @public      
    int age;       //int  wheels = 5;不允许在这里初始化
    double weight; //static int wheels;不能随便将成员变量当做C语言中的变量来使用
}

- (void)walk;
- (void)eat;
@end
//2.类的实现
@implementation Person

//实现@interface中声明的方法
- (void) walk

{
    NSLog(@"%d岁、%f公斤的人走了一段路",age,weight);
}

- (void) eat

{
    NSLog(@"%d岁、%f公斤的人在吃东西",age,weight);
}

@end

int main()
{
    //在使用类创建对象之前,会将类加载进内存
    Person *p = [Person new];
    p->age = 20;
    p->weight = 50.0;
    
    [p eat];
    [p walk];
    
    Person *p2 = [Person new];
    p2->age = 30;
    p2->weight = 60.0;
    
    [p2 walk];
    
    return 0;
}
方法和函数的区别:
 方法
 1.对象方法都是以减号 - 
 2.对象方法的声明必须写在@interface和@end之间
   对象方法的实现必须写在@implementation和@end之间
 3.对象方法只能由对象来调用
 4.对象方法归类\对象所有
 
 函数
 1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有
 2.函数调用不依赖于对象
 3.函数内部不能直接通过成员变量名访问某个对象的成员变量


小练习1:

#import <Foundation/Foundation.h>

/*
计算器类
 方法:
 1> 返回 π 
 2> 计算某个整数的平方
 3> 计算两个整数的和
*/

@interface JiSuanQi : NSObject

// 方法名:pi
- (double)pi;

// OC方法中,一个参数对应一个冒号
// 方法名:pingFang:(冒号也是方法名的一部分)
- (int)pingFang:(int)num;

//- (int)sum:(int)num1 :(int)num2;
// 方法名:sumWithNum1:andNum2:
- (int)sumWithNum1:(int)num1 andNum2:(int)num2;

//- (int)sumWithNum1:(int)num1 andNum2:(int)num2 andNum3:(int)num3;
@end

@implementation JiSuanQi

- (double)pi
{
    return 3.14;
}

- (int)pingFang:(int)num
{
    return num * num;
}

//- (int)sum:(int)num1 :(int)num2
- (int)sumWithNum1:(int)num1 andNum2:(int)num2
{
    return num1 + num2;
}
@end

int main()
{
    JiSuanQi *jsq = [JiSuanQi new];
  
    int a = [jsq sumWithNum1:20 andNum2:5];
    //int a = [jsq sum:10 :5];
    
    //int a =  [jsq pingFang:10];
    
    //double a = [jsq pi];
    NSLog(@"%i", a);   
    return 0;
}

小练习2:
/*
设计一个方法,用来和其他车比较车速,返回车速的差距
 */

#import <Foundation/Foundation.h>

@interface Car : NSObject
{
    @public
    int speed;
}

- (int)compareSpeedWithOther:(Car *)other;

@end

@implementation Car

- (int)compareSpeedWithOther:(Car *)other
{
    // speed
    // other->speed
    // 返回当前这辆车和other这辆车的速度差距
    return speed - other->speed;
}

@end

int main()
{
    Car *c1 = [Car new];
    c1->speed = 300;
    
    Car *c2 = [Car new];
    c2->speed = 250;
    
    int a = [c1 compareSpeedWithOther:c2];
    
    NSLog(@"a=%d", a);    

    return 0;

}

---匿名对象

//正常创建,调用方法
Car *c;
c = [Car new];
c->speed = 250;
[c run];

//不要写类似下面这样匿名对象的代码
//[Car new]每一次出现都将产生一个新的对象
//只要求能说出输出结果
[Car new]->speed = 300;
[[Car new] run];

你可能感兴趣的:(Objective-C—方法与成员变量、匿名对象)