摩托罗拉的笔试题


1.介绍一下STL,详细说明STL如何实现vector。
 
  答:STL 是 Standard Template Libary 的,翻译成中文叫做标准模版库.
      它是是容器,算法和迭代器的集合.通过迭代器作为桥梁将容器和算法
      联系起来.容器是用来存储数据的,算法是用来操作数据的.容器是模版化
      的数据集和,算法是泛形化的数据操作.利用 STL 进行开发,可以减轻对      于动态内存的操作,利于程序开发和维护.
 
      vector 是一个动态的数组,它的连续性其实是一种假象.vector 动态的      扩大容量的大小,是这样来实现的.首先来申请一个适合的存储空间,将原      来的内容拷贝进新的存储空间,再把旧的空间释放掉.
    
2.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?

  答: 指针和引用的区别:
   (1) 引用必须初始化,指针无需.
   (2) 引用经过编译器的优化不占用存储空间,
       在 32 位机器下指针占4个字节.
   (3) 引用和被引用的对象是同一个对象,
       指针内存放的是指向对象的地址.
   (4) 指针可以改变所指的对象,
       引用一经初始化就不可改变.
   (5) 引用利于理解,指针容易混淆.

      传引用确实比传指针安全,就如上面(4)所言指针可以改变指向.如果我们      为函数传入数组的首地址,而在函数内意外的修改了该首地址,可能会出      现意向不到的后果.
  
      我使用常量指针难道不行.这样是不行的,因为常量指针的指针的意识是
      指针不可以改变指向,但是可以更改指针所指的内容.这样也可能带来意      想不到的后果.
      如果非要指针的话,你可以这样的定义 const int*const p = &a;
      但是这样的可读性没有引用好,因此建议使用引用.


3.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么;

   答: 参数的传递方式有传递地址和传递数值两种方式。
       
        实现多态参数传递采用传递地址的方式。
      
        第三问不是很清楚。

4.构造函数可否是虚函数,为什么?析构函数呢,可否是纯虚的呢?
 
   答:构造函数不可是虚函数,因为在构造里面是需要明确的知道要构造什。
       虚函数是不确定的,因此可能会带来意想不到的后果。
       析构函数可以是纯虚的。虽然在语法上正确,但是在实际开发过程不应       该这样声明,因为基类的纯虚函数不可以定义。因此如果类中有动态申       请的空间,这样可能会造成内存泄漏。

5. 拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。

   答: 深拷贝是将资源和指针全都拷贝,而浅拷贝仅仅拷贝指针。

        如果拷贝拷贝构造函数是浅拷贝,程序可能造成对同一块内存删除两          次的情况,这样程序会崩溃。还有一种情况如果,指针改变了
        指向将造成内存泄漏。
  
        临时对象的开销比局部对象要小,临时对象不可以做左值。

6. 基类的有1个虚函数,子类还需要申明为virtual吗?为什么。
  
   答: 不需要。因为编译器会把它当作虚函数处理。

7. C++和C定义结构的分别是什么。

   答: C 中只有数据,而且都是公有的。
        C++ 中有数据也有函数,默认的是私有的。

      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值