a. 在C的击基础之上新增了1小部分面向对象的语法.
b. 将C的复杂的、繁琐的、可恶的语法封装的更为简单.
c. OC完全兼容C语言.
2. OC程序的源文件的后缀名是.mm代表message 代表OC中最重要的1个机制 消息机制.
C程序的源文件的后缀名.c
3. main函数仍然是OC程序的入口和出口.int类型的返回值 代表程序的结束状态.
main函数的参数: 仍然可以接收用户在运行程序的时候传递数据给程序.
参数也可以不要 。
4. #import指令.1).以#号开头,是1个预处理指令.
2).作用: 是#inlcude指令的增强版. 将文件的内容在预编译的时候拷贝写指令的地方.
3).增强: 同1个文件无论#import多少次,只会包含1次.
如果#include指令要实现这个效果 就必须要配合条件编译指令来实现.
而#import指令只需要直接包含就可以 其他什么都不用作.
4).简要原理: #import指令在包含文件的时候,底层会先判断这个文件是否被包含 如果被包含就会略过 否则才会包含.
5. 框架 1). 框架是1个功能集苹果或者第三方事先将一些程序在开发程序的时候经常要用到的功能事先写好.把这些功能封装在1个1个的类或者函数之中.
这些函数和类的集合就叫做框架.
有点像C语言的函数库.
2). Foundation框架.Foundation: 基础 基本. 这个框架中提供了一些最基础的功能 输入和输出. 一些数据类型.
Foundation.h的路径: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/Foundation.h
Foundation.h这个文件中包含了Foundation框架中的其他的所有的头文件.
所以,我们只要包含Foundation.h 就相当于包含了Foundation框架中所有的头文件.
那么Foundation框架中的所有的函数和类就可以直接使用.
6. @autoreleasepool是自动释放池.你只需要知道这个是1个自动释放池.
你可以将代码写在自动释放池之中 或者干脆把这个自动释放池删除 (目前)不会有任何影响.
NSLog(@"格式控制字符串",变量列表);
最简单的语法:
NSLog(@"要输出的信息");
3). 增强:
a. 输出一些调试相关信息.
2020-07-01 12:40:52.628 Day01-OC基础语法[784:210576] Hello,World!
执行这段代码的时间.
程序的名称.
进程编号.
线程编号.
输出的信息.
b. 会自动换行.在输出完信息之后 会自动换行.
c. OC中其实新增了一些数据类型. NSLog函数不仅仅可以输出C数据类型变量的值还可以输出OC新增的数据类型的变的值.
4).用法和printf函数差不多. 一样可以输出变的值 并且占位符和用法都一样
5).使用注意:
a. NSLog函数的第1个参数前面必须要加1个@符号.
b. 如果手贱在字符串的末尾加了1个'\n'代表换行 那么函数的自动换行功能就会失效.
------
忘记#include 用#import
忘记printf 用NSLog
8. 字符串 1). C语言的字符串的存储方式a. 使用字符数组存储
b. 使用字符指针
2). OC中设计了1个更为好用的用来存储字符串的1个类型. NSStringNSString 类型的指针变量 专门用来存储OC字符串的地址.
3). OC的字符串常量必须要使用1个前缀@符号."jack" 这是1个C语言的字符串.
@"jack" 这是1个OC的字符串常量.
NSString类型的指针变量,只能存储OC字符串的地址.
NSString *str = @"jack";
4).总结
a. 在OC中专门设计了1个NSString类型来存储字符串.
b. 字符串分为C字符串和OC字符串.
字符串如果没有@前缀 那么这个字符串常量就是1个C字符串.
字符串如果有@前缀 那么这个字符串常量就是OC字符串.
@"jack"
"rose"
所以,OC字符串常量的前面必须要加1个@符号.
c. NSString类型的指针变量 只能存储 OC字符串.
NSString *str = @"jack";
5). 注意1). NSLog函数的第1个参数是1个OC字符串,所以NSLog函数的第1个实参应该以@符号开头.
2). 如果要使用NSLog函数输出OC字符串的值,那么使用占位符%@
9. NS前缀.NextStep ---> Cocoa ---> Foundation框架之中.
10. @符号 1). 将C字符串转换为OC字符串."jack" @"jack"
2). OC中的绝大部分的关键字都是以@符号开头. 11. 注释: 和C语言的注释一模一样.分为单行注释和多行注释. 12. 函数的定义和调用. 与C语言的函数的定义和调用是一样的. 02-OC与C的对比 1. OC程序的编译、连接、执行.1). 在.m文件中写上符合OC语法规范的源代码.
2). 使用编译器将源代码编译为目标文件.
cc -c xx.m
a. 预处理
b. 检查语法
c. 编译.
3).链接
cc xx.o
如果程序中使用到了框架中的函数或者类.那么在链接的时候,就必须要告诉编译器
去那1个框架中找这个函数或者类.
cc xx.o -framework 框架名称.
cc main.o - framework Foundation
程序中用到了那1个框架中的功能 那么就再这个地方告诉编译器.
4) 链接成功以后 就会生成1个a.out可执行文件 执行就可以了.
2、 我们1点击运行按钮 所有的事情Xcode就帮助我们自动的做了.
3. OC程序和C程序各个阶段的后缀名对比
源文件 | 目标文件 | 可执行文件 | |
C | .c | .o | .out |
OC | .m | .o | .out |
1). OC中支持C语言中的所有的数据类型.
a. 基本数据类型
int double float char
b. 构造类型
数组 结构体 枚举
c. 指针类型
int *p1;
d. 空类型
void
e. typedef自定义类型.
2). BOOL类型. 1). 可以存储YES或者NO中的任意1个数据.2). 一般情况下BOOL类型的变量用来存储条件表达式的结果.如果条件表达式成立 那么结果就是YES
如果条件表达式不成立 结果就是NO
3). BOOL的本质.
typedef signed char BOOL;
实际上BOOL类型的变量 是1个有符号的char变量.
#define YES ((BOOL)1)
#define NO ((BOOL)0)
YES 实际上就是 1, NO 实际上就是 0
3). Boolean a.Boolean类型的变量可以存储true或者flase. b.一般情况下Boolean类型的变量用来存储条件表达式的结果.如果条件表达式成立 那么结果就是true
如果条件表达式不成立 结果过就是false
c. 本质typedef unsigned char Boolean;
#define true 1
#define false 0
4). class 类型. 类.
5). id类型 万能指针.
6). nil 与NULL差不多.
7). SEL 方法选择器.
8). block 代码段.
04-面向过程与面向对象
1. OC是在C的基础之上.
a. 将C复杂的繁琐的恶心的语法封装的更为简单.
#import
NSLog
NSString
.......
b. 在C语言的基础之上新增了一小部分的面向对象的语法.
2. 实现需求之一:要把大象放进冰箱应该怎么办?
a. 打开冰箱门.
b. 把大象放进去
c. 把冰箱门关上.
有没有更好的方式:
找1个冰箱 自己开门 自己把大象拉进去 自己关门.
买电脑的需求的实现方式
1). 根据自己的需求和预算确定买的电脑型号的.
10000 iOS开发.
2). 在网上查找资料 确定型号.
rMMP 9288
3). 去到岗顶.
4). 找到Apple专门店.
5). 砍价 成交.
6). 愉快的回家了.
-----------
有可能会出的问题. 就是被骗.........
避免被骗得方式: 找1个电脑高手.
买电脑的两种方式:
1). 每1件事情都是我们亲自去做. 这样不好 你不是专业的 所以你无法取做到专业.
强调的是过程,强调的是步骤. 我是主角. 我是1个彻头彻尾的执行者
2). 找1个电脑高手. 我只需要带钱 其他事情电脑高手帮助我做.
强调的是: 电脑高手. 我就是1个扬眉吐气的指挥者.
同1件事情我们有两种不同的解决思路.
如果解决1件事情的时候,每1件事情都是我们亲自去一步步实现 那么这种解决问题的思路叫做面向过程的解决思路.
如果解决1件事情的时候,自己不去亲自做,而是找1个专门做这件事情的人来帮助我们做.这样解决问题的思路我们就叫做面向对象的解决思路.
面向过程与面向对象是解决同1个问题的不同的思路.
3. 代码世界的面向过程与面向对象. 1). 面向过程.在遇到1个需求的时候,实现这个需求的每1个步骤 都是自己写代码亲自的去一步步的实现. 这样的解决问题的方式我们就叫做面向过程的方式.
2). 面向对象.在遇到1个需求的时候,不要亲自去实现 而是找1个专门做这件事情的人来帮助我们搞定. 这样的解决问题的方式就叫做面向对象的解决方式.
4. 面向对象和面向过程优缺点分析.C语言是1门面向过程的语言. 有功能的概念 但是没有人的概念.
OC语言是1门面向对象的语言.
面向过程的解决问题的缺点: 后期的维护和修改不方便.
面向对象的解决问题的优点: 后期的维护和修改十分方便.
使用面向对象设计我们的程序,可以让我们的程序在后期的维护和修改当中更加的方便和快捷.
5. 如何使用面向对象来设计程序呢?
当你遇到1个需求的时候. 不要亲自去实现.
1). 先看看有没有现成的人是专门做这件事情的. 框架. 如果有直接使用
2). 如果没有.就自己造出1个拥有这样的功能的人. 那么造出来的这个人可以多次使用的.
05-类与对象 1. 什么是对象?对象是现实生活中的1个具体存在. 看得见、摸的着.拿过来就可以直接使用.
2. 什么是类.物以类聚 人以群分.
类是对一群具有相同特征或者行为的事物的1个统称. 抽象的. 不能直接使用.
如果非要使用类的话呢?只能去找到这1类事物中的1个具体存在,然后使用这个具体存在.
3. 案例食物. -> 类
水果. -> 类
苹果. -> 类
烟台苹果 ->类
小东早上吃的那1个颗苹果. ->对象
交通工具.->类
车->类
汽车->类
奔驰汽车 ->类
奔驰汽车CLS350 ->类
----------------------------------
1. 类和对象之间的关系.类是模板.类的对象是根据这个模板创建出来的.
类模板中有什么,对象中就有什么 绝不可能多 也绝不可能少.
类是制造月饼的模子. 模子不可以吃 所以类不能直接使用.
对象是根据模子制造出来的月饼, 模子上有什么 月饼上就有什么 不会多也不会少.
月饼可以吃 所以对象可以使用.
2.如何设计1个类.类的作用: 用来描述一群具有相同特征和行为的事物的.
设计类的三要素.
-> 类的名字. 你要描述的这类事物叫什么名字.
-> 这类事物具有的相同的特征. 这类事物拥有什么
-> 这类事物具有的共同的行为. 这类事物会做什么.
3. 如何找到类.名词提炼法: 分析整个业务流程,分析出现了哪些名词. 这些名词就是你要找到的类.
3辆坦克发射了6枚炮d打中了3架飞机.
坦克类
特征: 型号.大小.颜色.重量. 材质. 射程.
行为: 行驶. 发射.
炮d类
特征: 型号.大小.威力.颜色. 重量.
行为: 飞 爆炸
飞机类
特征: 型号 作为数量.。。。。。
行为: 飞 爆炸.
小明在公交车上牵着1只叼着热狗的狗.;
人类:
姓名 性别....
搭公交. 遛狗.
公交车
品牌 价格 颜色..
行驶.
热狗
大小 颜色 味道 温度.
散发味道.
狗
颜色 品质......
吃热狗....
06-类与对象 1. 请问是先有类还是先有对象?从现实的角度 一定是先有对象再有类.
从代码的角度 一定是先有类再有对象.
2. 再一次确认类的作用: 描述1群具有相同特征和行为的事物的. 3. 如何定义类. 1).类的三要素. 2).定义类的语法a. 位置. 直接写在源文件之中 不要写在main函数之中.
b. 类的定义分为两个部分.
-> 类的声明
@interface 类名 : NSObject
{
这类事物具有的共同的特征.将他们定义为变量.
}
功能就是1个方法.将方法的声明写在这里.
@end
-> 类的实现
@implementation 类名
将方法的实现写在这里.
@end
@interface Person:NSObject
{
NSString *_name;
int _age;
float _height;
}
@end
@implementation Person
@end
3).几点注意
a. 类必须要有声明和实现
b. 类名用你描述的事物的名称来命名就可以了.
类名的每1个单词的首字母必须要以大写开头.
c. NSObject是神马意思 不用管 照写就可以了 。
d. 用来表示着类事物的共同的特征的变量必须要定义在@interface的大括号之中.
e. 定义在大括号之中用来表示着类事物的共同的特征的变量我们叫做.
属性、成员变量、实例变量、字段.......
f. 为类定义属性的时候,属性的名词必须要以_开头 下划线开头.
语法是固定的.
@interface 类名 : NSObect
{
这类事物具有的共同的特征定义为变量.
数据类型 变量名1;
数据类型 变量名2;
.........
}
@end
@implementation 类名
@end
4. 类的定义.
1). 类的作用.
2). 类的三要素.
3). 类的定义.
5. 类是无法直接使用的. 如果非要使用这个类的话,就必须要先找到这个类中的1个具体存在.再使用这个对象
类和对象的关系: 类中有的东西 这个类的对象也有 不会多少也不会少. 对象就可以使用.
这个时候我们就可以使用对象里面东西..
如何创建1个类的对象呢?
语法: 类名 *对象名 = [类名 new];
Person *p1 = [Person new];
根据Person这个类的模板,创建了1个对象名字叫做p1.
p1对象的特点:
-> 可以直接使用.
-> 类中定义的东西 这个对象中也有 不会多也不会少.
6. 如何使用对象;如何访问对象的属性:
1). 默认情况下,对象的属性是不允许被外界直接访问的.
如果允许对象的属性可以被外界访问,那么就再声明属性的是加1个@public关键字.
2). 访问对象的属性的方式
对象名->属性名 = 值;
对象名->属性名;
(*对象名).属性名;
平时使用的时候,使用->
7. 课堂练习:写1个学生类. 属性: 姓名 年龄 语文成绩 数学成绩 英语成绩
@interface Student : NSObject{
@public
NSString *_name;
int _age;
float _chinese;
float _math;
float _english;
}
@end
@implementation Student
@end
07-方法的声明实现和调用
1.定义1个类.
分为类的声明和实现
@interface 类名 : NSObject
{
属性 属性表示类的特征.
}
方法的声明; 方法表示类的功能.
@end
@implementation 类名
方法的实现;
@end
2.1类事物不仅具有相同的特征还具有相同的行为.行为就是1个功能. C语言中使用函数来表示1个功能.
OC的类具有的行为,我们使用方法来表示..
方法和函数都表示1个功能.
3. 无参数的方法. 1). 声明a. 位置: 在@interface的大括号的外面.
b. 语法:
- (返回值类型)方法名称;
- (void)run;
表示声明了1个无返回值并且无参数的方法 方法名字叫做run
2). 实现a.位置: 在@implementation之中实现
b.实现的语法:
将方法的声明拷贝到@implementation之中.去掉分号 追加大括号1对 将方法实现的代码写在大括号之中.
3).调用a. 方法是无法直接调用的.因为类是不能直接使用的.必须要先创建对象.
那么这个对象中就有类中的属性和方法了 就可以调用对象的方法了.
b. 调用对象的方法.
[对象名 方法名];
4.带1个参数的方法.1). 声明
a.位置: 在@interface的大括号的外面.
b.语法:
- (返回值类型)方法名称:(参数类型)形参名称;
- (void)eat:(NSString *)foodName;
定义了1个方法 这个方法没有返回值.
这个方法的名字叫做eat:
这个方法有1个参数,类型是NSString *类型的 参数的名字叫做foodName
- (void)eat:(NSString *)foodName;
void eat(NSString *foodName);
2). 实现
a.位置: 在@implementation之中实现
b.语法: 将方法的声明拷贝到@implementation之中.去掉分号 追加大括号1对 将方法实现的代码写在大括号之中.
3). 调用
a. 方法是无法直接调用的.因为类是不能直接使用的.必须要先创建对象.
那么这个对象中就有类中的属性和方法了 就可以调用对象的方法了.
b. 调用语法:
[对象名 方法名:实参];
方法头中的数据类型都要用1个小括号括起来.
- (返回值类型)方法名称:(参数类型)参数名称;
5.带多个参数的方法. 1) 声明a.位置: 在@interface的大括号的外面.
b. 语法:
- (返回值类型)方法名称:(参数类型)形参名称1 :(参数类型)参数名称2 :(参数类型)参数名称3;
- (int)sum:(int)num1 :(int)num2;
表示声明了1个方法 这个方法的返回值类型是int类型的.
方法的名称叫做 sum: :
有两个参数 参数类型都是int类型 参数名称叫做num1 num2
2).实现.a. 位置: 在@implementation之中实现
b. 实现的语法: 将方法的声明拷贝到@implementation之中.去掉分号 追加大括号1对 将方法实现的代码写在大括号之中.
3).调用:a. 方法是无法直接调用的.因为类是不能直接使用的.必须要先创建对象.
那么这个对象中就有类中的属性和方法了 就可以调用对象的方法了.
b. 调用带多个参数的语法
[对象名 方法名:实参1 :实参2 :实参3];
6. 带参数的方法声明的规范:1). 如果方法只有1个参数. 要求最好这个方法的名字叫做 xxxWith:
xxxWithxxx
eatWith:
eatWithFood:
这样写的话,那么调用方法的时候看起来就像是1条完整的语句. 提高了我们代码的阅读性.
遵守的规范: 就是让我们的方法调用的时候看起来像1条完整的语句.
2).如果方法有多个参数 建议这个方法名称:
方法名With:(参数类型)参数名称 and:(参数类型)参数名称 and:(参数类型)参数名称;
- (int)sumWith:(int)num1 and:(int)num2;
sumWith: and:
更详细的写法
方法名With参数1:(参数类型)参数名称 and参数2:(参数类型)参数名称 and参数3:(参数类型)参数名称;
08-其实使用注意 1. 同1个类可以创建无数个对象. 2. 同1个类的多个对象之间毫无关系.虽然他们拥有相同的属性和方法.
属性的值是不会相互影响的
3. 在方法的实现中,可以直接访问属性.在方法中访问的属性是谁的属性呢?
这个方法是通过那1个对象来调用的.那么方法中的直接访问的属性就是那1个对象的.
4. 案例.
定义1个类,叫做Student
属性: 体重.
方法: 跑步: 每跑1次 这个学生对象的体重-0.5;
吃饭: 每吃1次饭 这个学生对象的体重 +0.7
#import
@interface Student : NSObject{
@public
NSString *_name;
float _weight;
}
- (void)run;
- (void)eat;
@end
@implementation Student
- (void)run{
NSLog(@"%@piapia的跑啊啊...体重就轻了...",_name);
_weight-=0.5;
NSLog(@"%@运动减重0.5 当前体重:%.1lf",_name,_weight);
}
- (void)eat{
NSLog(@"%@是吃货...吃着吃着就重了...",_name);
_weight+=0.7;
NSLog(@"%@吃饭增重0.7 当前体重:%.1lf",_name,_weight);
}
@end
int main(int argc, const char * argv[]) {
Student *p1 = [Student new];
p1->_name = @"王大锤";
p1->_weight= 150 ;
[p1 run];
[p1 eat];
[p1 run];
[p1 eat];
[p1 run];
[p1 eat];
return 0;
}
课后作业要求:
* 类名、属性名、属性类型、方法名、方法参数、方法返回值自拟
* 自己写main函数测试设计是否合理
1.设计一个”狗“类
1.1 属性
* 颜色
* 奔跑的速度(单位是m/s)
* 性别
* 体重(单位是kg)
1.2 行为
* 吃:每吃一次,体重增加0.5kg,输出吃完后的体重
* 吠(叫):输出所有的属性
* 跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重
/* 1.设计一个”狗“类 1.1 属性 * 颜色 * 奔跑的速度(单位是m/s) * 性别 * 体重(单位是kg) 1.2 行为 * 吃:每吃一次,体重增加0.5kg,输出吃完后的体重 * 吠(叫):输出所有的属性 * 跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重 */ @interface Dog : NSObject{ @public NSString *_color; //颜色 int _speed; //速度 单位(m/s) int _gender; //性别 float _weight; //体重 单位(kg) } - (void)eat; - (void)bark; - (void)run; @end @implementation Dog - (void)eat{ _weight += 0.5 ; NSLog(@"Dog在吃完东西后,体重发生了变化,增加了0.5kg,现在的体重为: %.1lf kg",_weight); } - (void)bark{ NSString* gender = _gender == 1?@"公":@"母"; NSLog(@"Dog是%@色,奔跑速度为%dm/s, 性别是%@,体重是%.1lf kg",_color,_speed,gender,_weight); } - (void)run{ _weight -= 0.5 ; NSLog(@"Dog在跑完后,体重发生了变化,减少了0.5kg,现在的体重为: %.1lf kg",_weight); } @end int main(int argc, const char * argv[]) { Dog * dog = [Dog new]; dog->_color = @"黑白相间" ; dog->_gender = 1 ; dog->_speed = 10 ; dog->_weight = 25 ; [dog eat]; [dog bark]; [dog run]; return 0; }
2.设计一个”学生“类
1> 属性
* 姓名
* 生日
* 年龄
* 身高(单位是m)
* 体重(单位是kg)
* 性别
* C语言成绩
* OC成绩
* iOS成绩
2> 行为
* 跑步:每跑步一次,身高增加1cm,体重减小0.5kg,输出跑完后的体重
* 吃饭:每吃一次,身高增加1cm,体重增加0.5kg,输出吃完后的体重
* 学习:每学习一次,3可成绩各加1分,输出学习完后的3科成绩
* 睡觉:输出所有的属性
* 计算总分:算出3科成绩的总分并显示
* 计算平均分:算出3科成绩的平均分并显示
#import
/* 1> 属性 * 姓名 * 生日 * 年龄 * 身高(单位是m) * 体重(单位是kg) * 性别 * C语言成绩 * OC成绩 * iOS成绩 2> 行为 * 跑步:每跑步一次,身高增加1cm,体重减小0.5kg,输出跑完后的体重 * 吃饭:每吃一次,身高增加1cm,体重增加0.5kg,输出吃完后的体重 * 学习:每学习一次,3可成绩各加1分,输出学习完后的3科成绩 * 睡觉:输出所有的属性 * 计算总分:算出3科成绩的总分并显示 * 计算平均分:算出3科成绩的平均分并显示 */ @interface Student : NSObject{ @public NSString *_name; //姓名 NSString *_birthday; //生日 int _age; //年龄 float _height; //身高 单位(m) float _weight; //体重 单位(kg) int _gender; //性别 float _c; //C语言成绩 float _oc; //OC成绩 float _ios; //IOS成绩 } - (void)run; - (void)eat; - (void)study; - (void)sleep; - (void)getTotalScore; - (void)getAverageScore; @end @implementation Student - (void)run{ _height += 0.01 ; _weight -=0.5 ; NSLog(@"跑步后体重为:%.1lf",_weight); } - (void)eat{ _height += 0.01 ; _weight +=0.5 ; NSLog(@"吃饭后体重为:%.1lf",_weight); } - (void)study{ _c += 1; _oc += 1; _ios += 1 ; NSLog(@"C语言成绩:%.1lf,OC成绩:%.1lf,IOS成绩:%.1lf",_c,_oc,_ios); } - (void)sleep{ NSString * gender = _gender == 1?@"男":@"女"; NSLog(@"姓名:%@,生日:%@,年龄:%d,身高:%.1lf,体重:%.1lf,性别:%@,C语言成绩:%.1lf,OC成绩:%.1lf,IOS成绩:%.1lf",_name,_birthday,_age,_height,_weight,gender,_c,_oc,_ios); } - (void)getTotalScore{ float total = _c + _oc + _ios; NSLog(@"总分:%.1lf",total); } - (void)getAverageScore{ float average = (_c + _oc + _ios) / 3; NSLog(@"平均分:%.1lf",average); } @end int main(int argc, const char * argv[]) { Student *s1 = [Student new]; s1->_name = @"王大锤"; s1->_birthday =@"7月9日"; s1->_age = 2022-1988; s1->_height = 1.7; s1->_weight = 70 ; s1->_gender = 1 ; s1->_c = 75; s1->_oc = 80 ; s1->_ios = 85 ; [s1 run]; [s1 eat]; [s1 study]; [s1 sleep]; [s1 getTotalScore]; [s1 getAverageScore]; return 0; } 3. 设计1个车类.
1->属性
*品牌
*型号
*颜色
*座位数量
*轮子数量
*油量
2> 行为
行驶: 每行驶1次,油量减1 然后输出当前油量。
停止: 显示xx牌的汽车停止了.
加油: 每调用1此 油量+5 然后输出当前油量.
/* 3. 设计1个车类. 1->属性 *品牌 *型号 *颜色 *座位数量 *轮子数量 *油量 2> 行为 行驶: 每行驶1次,油量减1 然后输出当前油量。 停止: 显示xx牌的汽车停止了. 加油: 每调用1此 油量+5 然后输出当前油量. */ #import
@interface Car : NSObject { @public NSString *_brand; //品牌 NSString *_model; //型号 NSString *_color; //颜色 int _seatNum; //座位数量 int _wheelNum; //轮子数量 int _oilNum; //油量 } - (void)driver; - (void)stop; - (void)fuelUp; @end @implementation Car - (void)driver{ _oilNum -= 1 ; NSLog(@"行驶结束.当前油量:%d",_oilNum); } - (void)stop{ NSLog(@"%@ 牌汽车已停止!",_brand); } - (void)fuelUp{ _oilNum += 5 ; NSLog(@"加油完成!当前油量:%d",_oilNum); } @end int main(int argc, const char * argv[]) { Car *c1 = [Car new]; c1->_brand = @"大众"; c1->_model = @"甲壳虫"; c1->_color = @"黄色"; c1->_seatNum = 2 ; c1->_wheelNum = 4 ; c1->_oilNum = 50 ; [c1 driver]; [c1 stop]; [c1 fuelUp]; [c1 driver]; [c1 stop]; return 0; } 4. 设计1个球队类
1>属性
*球队名称
*球员数量
*教练数量
*胜利场数
*失败场数
2>行为
show: 展示自己的球队信息.
/* 设计1个球队类 1>属性 *球队名称 *球员数量 *教练数量 *胜利场数 *失败场数 2>行为 show: 展示自己的球队信息. */ #import
@interface Team : NSObject{ @public NSString *_Name; int _player; int _coaches; int _winNum; int _lostNum; } - (void)show; @end @implementation Team -(void)show{ NSLog(@"球队名称:%@",_Name); NSLog(@"球员数量:%d",_player); NSLog(@"教练数量:%d",_coaches); NSLog(@"胜利场数:%d",_winNum); NSLog(@"失败场数:%d",_lostNum); } @end int main(int argc, const char * argv[]) { Team *t1 = [Team new]; t1->_Name = @"谁也打不过队"; t1->_player = 20 ; t1->_coaches = 2 ; t1->_winNum = 0 ; t1->_lostNum = 108 ; [t1 show]; return 0; }
5.设计1个电脑类.
属性和行为请自己分析.
创建对象并创建。
(跟其他题目类似,跳过)6.设计1个书类.
属性:
书名
书号
作者
价格
页码
行为:
显示对象的所有属性的值.
/* 6.设计1个书类. 属性: 书名 书号 作者 价格 页码 行为: 显示对象的所有属性的值. */ #import
@interface Book : NSObject{ @public NSString *_name; //书名 NSString *_id; //书号 NSString *_author; //作者 float _price; //价格 int _pages; //页码 } - (void) show; @end @implementation Book - (void) show{ NSLog(@"书名:%@",_name); NSLog(@"书号:%@",_id); NSLog(@"作者:%@",_author); NSLog(@"价格:%.2lf",_price); NSLog(@"页码:%d",_pages); } @end int main(int argc, const char * argv[]) { Book *b1 = [Book new]; b1->_name =@"An Actor Prepares"; b1->_id = @"978-0878309832"; b1->_author = @"Constantin Stanislavski"; b1->_price = 6.04; b1->_pages = 344; [b1 show]; return 0; } 7.
类名:
手机(Phone)
属性:
颜色(_color ), 大小(_size), _cpu
行为:
查看本机信息(aboutMyPhone),
打电话(call), 应该有参数 传入电话号码才可以打电话.
发短信 (sendMessage) 参数:电话号码和短信内容.
/* 7. 类名: 手机(Phone) 属性: 颜色(_color ), 大小(_size), _cpu 行为: 查看本机信息(aboutMyPhone), 打电话(call), 应该有参数 传入电话号码才可以打电话. 发短信 (sendMessage) 参数:电话号码和短信内容. */ #import
@interface Phone : NSObject{ @public NSString *_color; int _size; NSString *_cpu; } - (void) abooutMyPhone; - (void) callWithNumber : (int) number; - (void) sendWithMessage: (NSString *) text toNumber : (int) number; @end @implementation Phone - (void) abooutMyPhone{ NSLog(@"本机颜色:%@, 大小:%d, CPU为:%@",_color,_size,_cpu); } - (void) callWithNumber : (int) number{ NSLog(@"正在呼叫: %d",number); } - (void) sendWithMessage: (NSString *) text toNumber : (int) number{ NSLog(@"正在给: %d 发送内容为【%@】的短信。",number,text); } @end int main(int argc, const char * argv[]) { Phone *p1 = [Phone new]; p1->_color = @"大酱色"; p1->_size = 6; p1->_cpu = @"8086"; [p1 abooutMyPhone]; [p1 callWithNumber:1888888888]; [p1 sendWithMessage:@"老板,需要按摩吗?" toNumber:1888888888]; return 0; } 创建对象并测试.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)