今天开始我们正式学习OC了,OC是在C语言基础上进行封装的,是一门面向对象的语言,而之前学的C语言是面向过程语言,今天初步学习下OC的基本知识:
1.c和oc的区别:
oc属于面向对象:面向过程关注的是解决问题需要哪些步骤
c属于面向过程:面向过程关注的是解决问题需要哪些步骤
2.类和对象的关系:
类和对象是面向对象中两个非常重要的概念:
类指的是具有一定属性的元素的集合,对象是直接用来操作的操作者.
3.oc中用到类的时候用如下步骤:
1.声明文件
#import <Foundation/Foundation.h>
// 类的声明
@interface Car : NSObject//这个使得Car类型具有创建对象的能力
{ //大括号,初始化成员变量为0!
@public//可以让Car对象的成员变量/实例变量属性被外界访问
int wheels; // 多少个轮子
int speed; // 时速
}
- (void)run; // 跑的行为,类型一定有小括号(定义的方法类型)
@end
2.类的实现
@implementation Car
- (void) run
{
NSLog(@"%i个轮子,%i时速的车子跑起来了", wheels, speed);
}
@end
3.创建对象
// 主函数
int main()
{
// 创建车子对象
Car *c = [Car new];//定义一个Car类型的指针c,指向[Car new]地址
c->wheels = 3;//进行赋值
c->speed = 300;
[c run];//
return 0;
}
创建类的练习题:
#import <Foundation/Foundation.h>
//typedef-枚举性别
typedef enum {
Sexman,
Sexwoman,
}Sex;
//typedef-年龄结构体
typedef struct {
int year;
int month;
int day;
}Date;
//typedef-枚举颜色
typedef enum {
ColorBlack,
ColorRed,
ColorGreen,
}Clor;
//声明,构造类-Dog
@interface Dog : NSObject
{
@public
double weight;
Clor curcolor;
}
- (void)eat;//声明方法
- (void)run;
@end
//Dog-方法的实现
@implementation Dog
- (void)eat
{
weight += 1;
NSLog(@"吃完这次的体重是%f", weight);
}
- (void)run
{
weight -=1;
NSLog(@"跑完这次的体重是%f", weight);
}
@end
//声明,构造结构体-Student
@interface Student : NSObject//允许Student可以创造对象
{
@public//允许外部指针改变变量
Sex sex;
Date birthday;
double weight;
Clor favColor;
char *name;
//重点:狗,构造一个Dog类型的变量,使得每个人都有一个dog
Dog *dog;
}
- (void)eat;//方法的声明
- (void)run;
- (void)printf;
@end
//Student-方法的实现
@implementation Student
//方法eat
- (void)eat
{
weight += 1;
NSLog(@"吃完这次的体重是%f", weight);
}
//方法run
- (void)run
{
weight -=1;
NSLog(@"跑完这次的体重是%f", weight);
}
//方法myprint
- (void)printf
{
NSLog(@"性别是%d,喜欢的颜色是%d,体重是%f,姓名是%s,生日是%d-%d-%d", sex, favColor, weight, name, birthday.year, birthday.month, birthday.day);
}
@end
//main函数主体
int main(int argc, const char * argv[]) {
@autoreleasepool {
//构造一个Student类型的指针s,指向[Student new]
Student *s =[Student new];
//构造一个Dog类型的狗
Dog *d = [Dog new];
d->curcolor = ColorGreen;
d->weight = 50;
s->dog =d;
s->weight =50;
//性别
s->sex = Sexman;
//生日
s->birthday.year = 2012;
s->birthday.month = 12;
s->birthday.day = 29;
//喜欢的颜色
s->favColor = ColorBlack;
//名字
s->name = "jack";
[s printf];
}
return 0;
}
总结:
要注意一下几点:
1)充分理解面向对象的含义;
2)注意OC中是如何定义类的,以及类的声明,实现等.