typedy enum
{
Sexman,
Sexwoman/*不直接写woman而带上枚举名Sex,给人一目了然,知道是哪个枚举里的常量*/
} Sex;//枚举大括号后面,变量之间有个空格
typedef struct{
int month;
int day;
int year;
} Date;
typedef enum{
ColorBlack;
ColorYellow;
ColorRed;
} Color;
/*
学生类
成员变量:性别,生日,体重,喜欢颜色,狗(体重,毛色,吃,跑)
方法:吃,跑步,遛狗,喂狗
*/
#import <Foundation/Foundation.h>
@interface Dog :NSObject
{
double weight;//体重
Color curColor;//毛色
}
- (void)eat;
- (void)run;
@end
@implementation Dog
- (void)eat
{
weight +=1;
NSLog(@"狗吃完后体重为%f",weight);
}
- (void)run
{
weight -=1;
NSLog(@"狗跑后的体重是%f",weight);
}
@end
@interface Student :NSObject
{
//成员变量什么类型都可以的
@Public
Sex sex;//性别
Date birthday;//生日
double weight;//体重
Color favColor;//最喜欢颜色
Char *name;
//重点:狗属性
Dog *dog;//任何OC对象都是指针指向
}
- (void)eat;//减号后面有个空格
- (void)run;
- (void)print;
- (void)weiDog;
- (void)liuDog;
@end
@implementation Student
-(void)eat
{
weight +=1;
NSLog(@"学生吃完后体重为%f",weight);
}
- (void)run
{
weight -=1;
NSLog(@"学生跑后的体重是%f",weight);
}
- (void)print
{
//对象方法访问内部的成员变量,直接写成员变量即可
NSLog(@"姓名是%s,性别是%d,喜欢的颜色=%d,生日=%d-%d-%
d",name,sex,favColor,birthday.year,birthday.month,birthday.day);
}
- (void)weiDog
{
//让狗跑起来调用狗的run方法
[dog run];
}
- (void)liuDog
{
[dog eat];//调用狗的eat方法
}
@end
int main()
{
Student *s=[Student new];
Dog *d = [Dog new];
d->curColor =Color Green;
d->weight =20;
s->dog =d;
//s->dog =[Dog new];//对象里有对象,这才叫真正的面向对象
s->weight=50.0;
//性别
s->sex =SexMan;
//生日
/*s->birthday ={2011,9,23};这句话错误的原因是因为定义结构体变量的同时进行初始化才行,前面已经Date结构体定义过结构体变量birthday,现在不能再整体赋值,只能针对结构体里面单个变量进行改变.例如:s->birthday.year =2015;*/
Date d ={2011,9,23};
s->birthday =d;
s->name ="Jack";
s->favColor =ColorBlack;
[s eat]
[s run]
[s print];
[s liuDog];
[s weiDog];
return 0;
}
/*计算机类
方法:
1>返回PI
2>计算两个整数的和
3>计算某个整数的平方
*/
#import <Foudation/Foundation.h>
@interface JSQ: 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
@end
@implementation JSQ
- (double)pi
{
return 3.14;
}
//- (int)sum:(int)num1 :(int)num2//在num1后面一定要加个空格
- (int)sumWithNum1:(int)num1 andNum2:(int)num2
{
return num1+num2;
}
-(int) pingfang:(int)num
{
return num*num;
}
@end
int main()
{
JSQ *jsq =[JSQ new];
double a= [jsq pi];
int a = [jsq pingfang:10];
int b = [jsq sum:10 :5];//对应方法定义,10后面有空格
[jsq sumWithNum1:10 andNum2:5];
NSLog(@"%d",a);
return 0;
}
//用来和其他车比较车速,返回车速差距
#import <Foundation/Foundation.h>
@interface Car: NSObject
{
@public
int speed;
}
//int 为返回值类型,Car * 是对象指针,要搞清楚
- (int)compareWithOther:(Car *)other //如何设计的也要学会
@end
@implementation
- (int)compareSpeedWithOther:(Car *)other
{
//speed
//other->speed
//返回当前车速与另一个车速的差距
return speed - other->speed
}
@end
int main()
{
Car *c1 = [Car new];
/*匿名对象
[Car new]->speed= 300;(1)
[[Car new] run](2) 调用run后speed的值依然是0;
1,2两句里面的对象是不一样的。这样的代码不好,不要这样写。只要求能看懂这种语法。
*/
c1->speed =300;
Car *c2 =[Car new];
c2->speed =260;
int a = [c1 compareSpeedWithOther:c2];//如何调用
NSLog(@"a=%d",a);
return 0;
}
需要注意的是:
1.-(int)run 减号后面一定要有空格
2.函数要写注释,函数名通俗易懂
3.return a==b;//直接相等返回1,不相等返回0,写法简便明了
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com