测试题答案

简介:

C++

1.String 的具体实现

已知String类定义如下:

class String

{

    public:

    String(const char *str = NULL); // 通用构造函数

    String(const String &another); // 拷贝构造函数

    ~ String(); // 析构函数

    String & operator =(const String&rhs); // 赋值函数

    private:

    char *m_data; // 用于保存字符串

};

尝试写出类的成员函数实现。

String::String(const char*str){if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断{m_data = new char[1] ;m_data[0] = '\0' ;}else{m_data = newchar[strlen(str) + 1];strcpy(m_data,str);}} String::String(const String &another)

{m_data = newchar[strlen(another.m_data) + 1];strcpy(m_data,other.m_data);}String&String::operator =(const String &rhs){if ( this == &rhs)return *this;delete []m_data; //删除原来的数据,新开一块内存m_data = new char[strlen(rhs.m_data) + 1];strcpy(m_data,rhs.m_data);return*this ;}String::~String(){delete []m_data ;}

 

2.C++中的classstruct的区别

(一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;

(二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。

除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。

 

3.既然C里面已经有了malloc、free,为什么还要new、delete

它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。使用new、delete对象在创建的同时自动执行构造函数,对象在消亡之前自动执行析构函数。

 

4.请写出下面程序的输出结果

#include<iostream>

using namespace std;

 

class A{

public:

    A(){cout<<"A"<<endl;func();}

    virtual void func(){cout<<"funcA"<<endl;}

    virtual~A(){cout<<"~A"<<endl;};

};

class B:publicA{

public:

    B(){cout<<"B"<<endl;func();}

    virtual void func(){cout<<"funcB"<<endl;}

    virtual~B(){cout<<"~B"<<endl;};

};

 

int main(int argc,constchar * argv[])

{

    A *a = new B;

    deletea;

    return 0;

}

A              //先创建基类对象

funcA      //虚函数看指向,之前的想法是调用B的方法,此时A还没有创建好,所以B也就还没创建,所以就调用A的func

B                  

funcB

~B

~A     //析构函数必须是虚函数,这样如果是指针类型在释放子类对象的时候,才能也将父类对象都释放完毕,才能释放的彻底。

 

 

IOS

选择题

1.Person *person =[[Person alloc]initWithObjects:@"11", nil];

     [person release];

     NSLog(@"%d", person.retainCount);会输出多少?

解释:我感觉出这种题目的公司是误导开发者的行为,属于没意义的题目,我相信大牛也解释不了!如果在person的dealloc中写上NSLog(@"释放了");再运行这句会发现,已经输出“释放了”,但是它的retainCount还会输出1,苹果官方对retianCount的解释也是不能完全信这个计数器,只能供学习参考!希望公司不要出这种没意义的题目!或者是对应聘者选的是A要给以支持

A.0      B.-1     C.1   D.错误,直接崩溃

 

2.NSString *aa =@"Simple Audio Engine";

     NSLog(@"%@",[aasubstringToIndex:8]);会输出什么?

A.Simple Au      B.A     C.Simple A    D.u

 

3.变量命名正确的是:

A.2A      B._AA      C..AA   D.-AA

 

4.int a = 0; -+a--;NSLog(@"%d",a);会输出什么?

     A.0     B.-1      C.1   D.不确定

 

5.NSString *str =@"a123";NSLog(@"%d",[str intValue]);会输出什么?

这个题目我也觉得无语,怎么不是系统报错,如果@“0”,这岂不是也会输出0,那根据结果是0,怎么判断你之前写的是0还是非0

     A.0      B.123     C.123a    D.不确定

 

6.已知inta = 6;则执行 a+=a-=a*a;语句后,a的值为

     A.36     B.0      C.-24    D.-60

 

7.NSString *str =@"a123"; NSLog(@"%@",(str ==@"123")?@"yes":@"no");会输出什么?

对象的保存的地址都是不一样的!

     A. yes     B. no      C.不确定   D.错误

 

8.@[@"a",@"b"];该类型是

NSArray *arr = @[@"a",@"b"]

     A._字符串对象      B.字典对象      C.数组对象    D.集合对象

 

9.多态的定义是:

     A._来自不同对象可以接受同一消息的能力     

     B.来自不同类的对象可以接受同一消息的能力     

     C.来自不同的类可以接受同一消息的能力   

     D.以上都不是

 

10.下列条件语句中,功能与其他语句不同的是

    A.if(a)printf("%d\n",x); else printf("%d\n",y);

    B.if(a=0)printf("%d\n",y); else printf("%d\n",x);   //这个b选项if判断里面相当于if(0)

    C.if (a!=0)printf("%d\n",x); else printf("%d\n",y);

    D.if(a==0) printf("%d\n",x); elseprintf("%d\n",y);

 

11.已知char s[20],*p=s,则在下列语句中,错误的是

     A.p=s+5

     B.s=p+s  //s是一个已经确定好了的地址,不是一个指针,所以不能重新给他赋值

     C.s[2]=p[4]

     D.*p=s[0]

 

12.若w=1,X= 2,y= 3,z=4,则条件表达式w<x?w:y<z?y:z的值是:  

注意:从前往后执行,跟&&是一样的,从前往后判断,如果一旦确定了后面就不执行了

    A.表达式错误      B.-1      C.0       D.1

13.以下for循环语句 for(;;) printf("**");

A.判断循环结束的条件不合法

B.是无限循环

C.一次也不执行

D.只执行一次

 

14.以下关于子类和父类的叙述中,正确的是

A.代码中使用父类对象的地方,都可以使用子类对象进行替换      //解释:因为父类有的消息,子类都有

B.代码中使用子类对象的地方,都可以使用父类对象进行替换

C.父类定义的对象与子类定义的对象在属性和方法上一定相同

D.父类定义的对象与子类定义的对象在属性和方法上一定不同

 

15.下面四个选项中,均是合法浮点数的选项是

A.+1e+1      B.-.60      C.123e       D.-e3 

   5e-9.4        12e-4        1.2e-.4       .8e-4

   03e2          -8e5         +2e-1         5.e-0

 字母e(或E)之前必须有数字,且e后面的指数必须是整数

简答题

1.NSString *a =@"abc";   a能添加到定义好的NSArray里面吗

答:不能

 

2.浅复制和深复制的区别?

答:浅复制是指针复制,深复制是对象拷贝

 

3.简要说说继承与分类的区别

答:对于实例变量子类不可以访问父类的私有变量而分类可以,对于添加实例变量子类可以添加而分类不可以

 

4.简要说说正式协议与非正式协议的区别

答:非正式协议,是使用类别category来实现,非正式协议是NSObject的一个类别,这样任何类的对象都可以作为委托对象来使用,正式协议,是一个命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议,此时,实现协议的类应该遵守协议,否则编译器将会发出警告。

 

5.简要说说可变对象与不可变对象的不同之处

答:可变对象的修改是在源对象基础之上,不可变对象的修改是非本对象

 

6.简要说说对象的生命周期

答:new、allloc、copy、retain对象引用计数加1、release对象引用计数减1,当引用计数大于零时对象保留,引用计数为零时调用delloc方法释放对象,使用autorelease对象在未来某个时刻释放自动释放池的时候会遍历该自动释放池,使池内的每个对象的引用计数减1

 

7.对于属性@property里的参数列表什么时候用retain, 什么时候用copy

答:当对象本身是不可变对象的时候,为防止传入的参数是可变的使用copy,其他时段都可以使用retain

 

8.阐述一下 person.money=100; 和 int num = person.money 的区别

答:前者调用的是setter方法,而后者调用的是getter方法

 

9.retain,assign,copy,nonatomic,atomicreadwrite,readonly属性的作用

答:retain,assign,copy用于实例变量存取器的内存管理、nonatomic,atomic是否有原子操作、readwrite,readonly用于实例变量的存取器生成

 

10.self/super 的区别

答:self指代当前对象,super指代父类

 

11.id 声明的对象有什么特性?

答:声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象

 

12.分析一下NSMutableArray *arr = [NSMutableArrayarrayWithObjects:@"123", nil]; 和  NSMutableArray *arr = [[NSMutableArrayalloc]initWithObjects:@"123", nil];的区别

答:前者生成的对象是自动生成的,后者生成的对象需要手动进行释放

 

13.用宏定义MIN输入两个参数输出最小值

答:#defineMIN((A),(B)) ((A)<(B)?(A):(B))

 

14.请描述自动释放池的工作原理

答:一个自释放池是一个明确定义了范围的对象集合,这个范围标记着最终什么时候释放。自释放池可以被嵌套。当你发送一个 autorelease 消息, 一个该对象的引用被放进最近的自释放池中。它仍然是一个有效的对象,所以其他在自释放池定义范围内的对象可以给它发送消息。当程序执行到范围末尾时,这个池被释放。

 

15.为什么重写父类方法都需要去重新调用父类的方法,如self = [super init];

答:因为OC中继承父类在子类中重写父类的方法,子类并不会主动去调用父类的方法



















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366444,如需转载请自行联系原作者

相关文章
|
5月前
c进阶测试题(上)
c进阶测试题(上)
32 0
|
5月前
|
C++
c进阶测试题(下)
c进阶测试题(下)
46 0
|
10月前
|
存储
合工大 R语言期末测试题答案
合工大 R语言期末测试题答案
92 0
|
存储 安全 小程序
软件测试面试题及答案,这些可以白嫖的题目确定不收藏?
对于软件测试培训人员来说,除了掌握好专业的理论知识和技术,最重要的面试准备也是少不了的,毕竟面试可是大家正式进入软件行业的拦路虎,所以,在正式面试前,相关的软件测试面试题真题以及答案也一定要背一背!
122 0
|
小程序 测试技术 Python
软件测试面试题及答案 这个可以免费白嫖的题库不要错过了
对于很多新手软件测试人来说,除了掌握扎实的专业技能之外,你还需要一份个互联网软件测试工程师面试题库才能在万千面试者中杀出重围,成功拿下offer。
139 0
|
数据挖掘
2020年小美赛题目B题翻译(参考就行,我没参加比赛,纯属兴趣使然)
2020年小美赛题目B题翻译(参考就行,我没参加比赛,纯属兴趣使然)
145 0
2020年小美赛题目B题翻译(参考就行,我没参加比赛,纯属兴趣使然)
|
存储 云安全 弹性计算
阿里云考试难不难,怎么才能通过?
现在阿里云是国内占市场份额最大的云计算企业,在业内有很大的名气和认可度,越来越多的人打算考阿里云的认证证书,以求获得更好的岗位和薪资。
335 0
阿里云考试难不难,怎么才能通过?
|
弹性计算 运维 安全
阿里云服务器的问题及答案(详细汇总)
阿里云服务器是什么、阿里云服务器可以干嘛、阿里云服务器租用价格表、阿里云服务器新手教程是很多用户对于阿里云服务器最为关心的问题,本问整理总结了一些热门问题及答案,了解这些问题,你可以更好的使用阿里云服务器。
|
弹性计算 运维 安全
关于阿里云服务器的问题及答案(详细汇总)
阿里云服务器是什么、阿里云服务器可以干嘛、阿里云服务器租用价格表、阿里云服务器新手教程是很多用户对于阿里云服务器最为关心的问题,本问整理总结了一些热门问题及答案,了解这些问题,你可以更好的使用阿里云服务器。
768 0
|
前端开发 JavaScript