Objective-C基础测试(略简单)

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:
	先加载代码到代码段,再在栈和堆里面开辟空间等。
	
	 
	 
四、 编程题(共计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 
	#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 
	
	@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 
#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 
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 
#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 

@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 
#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 

@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基础测试(略简单))