Objective-C编程基础 (A卷)
一. 选择题。(3分*5题,共计15分)
1.一个方法:- (void)setName: (NSString* )aName andAge: (int)aAge;
关于这个方法的方法名描述正确的是( D )
A、- (void)setName: (NSString* )aName andAge: (int)aAge
B、- (void)setName: andAge:
C、setName: (NSString* )aName andAge: (int)aAge
D、setName: andAge:
。
2.下面那种标示符表示类的继承关系(B)
A、public B、冒号 : C、箭头 - > D、private
3.如果类中的一个属性只能在本类中被访问,则应该使用下面哪个修饰符修饰。(C)
A、public B、 protected C、 private D、default
4.在Objective-C中,如果允许使用已存在的类作为基础创建新的类, 则使用什么方式实现。(B)
A、封装 B、 继承 C、 多态 D、覆盖
5.类是以什么类型存储在代码段之中的:(C)
A、SEL B、NSObject C、Class D、NSString
一. 填空题。(3分*5题 ,共计15分)
1.面向对象的三大特征是__封装____、__继承____和__多态____。
2.___self__关键字在对象方法中指向当前对象;__self___关键字在类方法中指向当前类;子类方法中通过__super___关键字访问父类中的方法。
3.Objective c 中 cocoa框架中有很多苹果官方提供的类,这些类都是__NSObject____类的子类或者间接子类。
4. 对象与对象之间的三种关系:___依赖关系____、___组合关系____、____关联关系____;
5.OC中,当使用点语法为成员属性赋值时,编译器在编译时会将点语法转换为调用该属性的_setter___方法;当使用点语法取值时,会转换为调用该属性的__getter___方法;
二. 简答题。(5分*4题,共计20分)
1. 简述#import和#include二者的区别。(5分)
A:区别就是 #import 可以自动防止重复包含
而#include需要添加以下代码才可以防止重复包含:
#ifndef 文件名
#define 文件名
#inclue 文件名(视情况用()或""括起来)
#endif
2. Objective-C中定义成员变量修饰符分别有哪些?有何不同?(5分)
A:有4个
1)@private,使成员变量成为私有,只能在本类的对象方法中访问。可以被之类继承,但是不能被直接访问。
2)@protected,使成员变量成为受保护的类型,能在本类对象方法中访问。可以被之类继承和访问。
3)@package,使得成员变量可以在当前框架下对象方法中使用。
4)@public,使得成员变量成为共有,可以在本target的任何地方的对象方法中通过对象去访问。
建议使用@protected,默认也是这种类型。永远不要用@public,不安全,不符合面向对象封装的特点。
3. 请简述内存的几大分区?(5)
A:内存分为栈,堆,BSS,数据段(常量区),代码段五大区域。
栈:存储局部变量。
堆:创建对象时分配的空间,以及程序员手动malloc,calloc,realloc分配的空间都是在这里分配。
数据段:存放已初始化的全局变量和静态变量,以及常量数据(包括字符串常量)。
BSS: 存放未初始化的全局变量和静态变量。
代码段:存放程序运行时加载的所有的代码。
由下往上看,是程序运行时 内存的分配情况。
4. 如果有类Dog
属性: _name,_age
方法: -(void)shout; -(void)eat;
main()方法中有代码如下:
Dog *d1 = [Dog new];
请绘制d1对象在内存中的存储细节(画图);
A:
先加载代码到代码段,再在栈和堆里面开辟空间等。
<img src="https://img-blog.youkuaiyun.com/20150825235823227?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
四、 编程题(共计50分)
1、设计1个车子类Car,有轮子wheels和速度speed两个属性,实现属性相应的set和get方法:轮子数不能大于4,并且不能小于0;速度不能大于200,并且不能小于0。
(10分)
/*
1、设计1个车子类Car,有轮子wheels和速度speed两个属性,实现属性相应的set和get方法:轮子数不能大于4,并且不能小于0;速度不能大于200,并且不能小于0。
*/
#import <Foundation/Foundation.h>
#import "Car.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
Car *c = [Car new];
c.speed = 120.333;
c.wheels = 4;
[c show];
}
return 0;
}
/*Car.h
*/
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property short wheels;
@property float speed;
- (void)show;
@end
/*
Car.m
*/
#import "Car.h"
@implementation Car
- (void)setWheels:(short)wheels
{
_wheels = (wheels >= 0 && wheels <= 4) ? wheels : -1 ;
}
- (void)setSpeed:(float)speed
{
_speed = (speed >= 0 && speed <= 200) ? speed : -1 ;
}
- (void)show
{
NSLog(@"车子有%hd个轮子,速度为%.2f",_wheels, _speed);
}
@end
2、请按照以下要求设计一个类People,并进行测试。(15分)
要求如下:(属性要求使用@property)
1)People类中包含姓名(name)、性别(sex)、年龄(age)三个属性;
2)People类中,请重写description方法,用于输出对象的自我介绍信息,如“大家好!我叫小华,我是一个女孩,我今年10岁”。
3)在main()方法中创建一个People类的实例对象p1,为属性name、sex、age赋值。然后使用这个对象调用description方法,输出p1的相关信息。
4)设计一个学生类 Student 继承自People
要求如下:
a、Student 类中包含所学专业;
b、重写父类的description方法,输出学生的所有信息(包含所学专业);
c、在main()方法中创建一个 Student 类的实例对象s1,并输出学生信息。
/*
main.m
*/
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
People* p1 = [People new];
p1.name = @"紫霞";
p1.sex = feMale;
p1.age = 18;
Student* s1 = [Student new ];//ca,少 * 了
s1.name = @"至尊宝";
s1.age = 19;
s1.sex = male;
s1.zhuanYe = @"挖掘机技术";
NSString* str1 = [p1 description];
NSString* str2 = [s1 description];//字母打错的话,上一行报错,醉了!
NSLog(@"%@", str1);
NSLog(@"%@", str2 );
}
return 0;
}
/*
Perple.h
*/
#import <Foundation/Foundation.h>
typedef enum{male,feMale} Sex;
@interface People : NSObject
@property NSString* name;
@property Sex sex;
@property short age;
- (NSString*)description;
@end
/*
People.m
*/
#import "People.h"
@implementation People
- (NSString *)description
{
return [NSString stringWithFormat:@"大家好!我叫%@,是一个%@,我今年%hd岁了",_name, _sex == male ? @"男孩" : @"女孩", _age];
}
@end
/*
Student.h
*/
#import "People.h"
@interface Student : People
@property NSString* zhuanYe;
- (NSString *)description;
@end
/*
Student.m
*/
#import "Student.h"
@implementation Student
- (NSString *)description
{
return [NSString stringWithFormat:@"大家好!我叫%@,是一个%@,我今年%hd岁了,所学专业为%@。",
super.name, super.sex == male ? @"男孩" : @"女孩", super.age, _zhuanYe];
}
@end
3. 设计一个计算器类,实现以下两个“类方法”:(10分)
1)计算两个数的和
2)计算两个数的平均值
/*
3. 设计一个计算器类,实现以下两个“类方法”:(10分)
1)计算两个数的和
2)计算两个数的平均值
*/
#import <Foundation/Foundation.h>
#import "Calculator.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
float sum = [Calculator addNum1:11.111 withNum2:22];
float avg = [Calculator avgOfNum1:11.111 andNum2:22];
NSLog(@"num1 + num2 = %.2f!",sum);
NSLog(@"num1 和 num2的平均值为%.2f", avg);
}
return 0;
}
//
// Calculator.h
#import <Foundation/Foundation.h>
@interface Calculator : NSObject
+ (float)addNum1:(float)num1 withNum2:(float)num2;
+ (float)avgOfNum1:(float)num1 andNum2:(float)num2;
@end
//
// Calculator.m
#import "Calculator.h"
@implementation Calculator
+ (float)addNum1:(float)num1 withNum2:(float)num2
{
return num1 + num2;
}
+ (float)avgOfNum1:(float)num1 andNum2:(float)num2
{
return [self addNum1:num1 withNum2:num2] / 2;
}
@end
4. 实现多态:
1)请写一个People类,它有一个语言属性language和一个对象方法sayHi;
2)创建中国人类,继承People类,并重写父类的sayHi方法,在方法中输出“中国人用中文打招呼”;
3) 创建日本人类,继承People类,并重写父类的sayHi方法,在方法中输出“日本人用日语打招呼”;
4) main()方法中使用People类指针分别指向中国人类、日本人类所创建的实例对象,并分别为中国人和日本人的属性language赋值,最后分别调用sayHi方法。(15分)
/*
main.m
*/
#import <Foundation/Foundation.h>
#import "Chinese.h"
#import "Japanese.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
People *chineseP =[ Chinese new ];
People *japaneseP =[ Japanese new ];
chineseP.language = @"中文";
japaneseP.language = @"日语";
[chineseP sayHi];
[japaneseP sayHi];
}
return 0;
}
//
// People.h
#import <Foundation/Foundation.h>
@interface People : NSObject
@property NSString* language;
- (void)sayHi;//不实现会:警告,最好实现
@end
//
// People.m
#import "People.h"
@implementation People
- (void)sayHi
{
NSLog(@"hi");
}
@end
//
// Chinese.h
#import "People.h"
@interface Chinese : People
@end
//
// Chinese.m
#import "Chinese.h"
@implementation Chinese
- (void)sayHi
{
NSLog(@"中国人用%@打招呼",super.language);
}
@end
//
// Japanese.h
#import "People.h"
@interface Japanese : People
@end
//
// Japanese.m
#import "Japanese.h"
@implementation Japanese
- (void)sayHi
{
NSLog(@"日本人用%@打招呼",super.language);
}
@end
汗,狂你妹!这都错!
Objective-C基础测试(略简单)
最新推荐文章于 2025-07-04 13:47:25 发布