Sony笔试题和面试题答案(3)

更新时间:2018-11-22 15:51作者:王华老师

      43. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]

      答:

      a. class B : public A { ……} // B公有继承自A,可以是间接继承的

      b. class B { operator A( ); } // B实现了隐式转化为A的转化

      c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数

      d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

      44. 以下代码中的两个sizeof用法有问题吗?[C易]

      void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母

      {

      for( size_t i=0; i

      if( 'a'<=str && str<='z' )

      str -= ('a'-'A' );

      }

      char str[] = "aBcDe";

      cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;

      UpperCase( str );

      cout << str << endl;

      答:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。

      45. 以下代码有什么问题?[C难]

      void char2Hex( char c ) // 将字符以16进制表示

      {

      char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);

      char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);

      cout << ch << cl << ' ';

      }

      char str[] = "I love 中国";

      for( size_t i=0; i

      char2Hex( str );

      cout << endl;

      46. 以下代码有什么问题?[C++易]

      struct Test

      {

      Test( int ) {}

      Test() {}

      void fun() {}

      };

      void main( void )

      {

      Test a(1);

      a.fun();

      Test b();

      b.fun();

      }

      答:变量b定义出错。按默认构造函数定义对象,不需要加括号。

      47. 以下代码有什么问题?[C++易]

      cout << (true?1:"1") << endl;

      答:三元表达式?:问号后面的两个操作数必须为同一类型。

      8. 以下代码能够编译通过吗,为什么?[C++易]

      unsigned int const size1 = 2;

      char str1[ size1 ];

      unsigned int temp = 0;

      cin >> temp;

      unsigned int const size2 = temp;

      char str2[ size2 ];

      答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。

      48. 以下代码中的输出语句输出0吗,为什么?[C++易]

      struct CLS

      {

      int m_i;

      CLS( int i ) : m_i(i) {}

      CLS()

      {

      CLS(0);

      }

      };

      CLS obj;

      cout << obj.m_i << endl;

      答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。

      49. C++中的空类,默认产生哪些类成员函数?[C++易]

      答:

      class Empty

      {

      public:

      Empty(); // 缺省构造函数

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

      ~Empty(); // 析构函数

      Empty& operator=( const Empty& ); // 赋值运算符

      Empty* operator&(); // 取址运算符

      const Empty* operator&() const; // 取址运算符 const

      };

      50. 以下两条输出语句分别输出什么?[C++难]

      float a = 1.0f;

      cout << (int)a << endl;

      cout << (int&)a << endl;

      cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?

      float b = 0.0f;

      cout << (int)b << endl;

      cout << (int&)b << endl;

      cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么

      51. 以下反向遍历array数组的方法有什么错误?[STL易]

      vector array;

      array.push_back( 1 );

      array.push_back( 2 );

      array.push_back( 3 );

      for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组

      {

      cout << array << endl;

      }

      答:首先数组定义有误,应加上类型参数:vector array。其次vector::size_type被定义为unsigned int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导致循环失去控制。

      52. 以下代码有什么问题?[STL易]

      typedef vector IntArray;

      IntArray array;

      array.push_back( 1 );

      array.push_back( 2 );

      array.push_back( 2 );

      array.push_back( 3 );

      // 删除array数组中所有的2

      for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )

      {

      if( 2 == *itor ) array.erase( itor );

      }

      答:同样有缺少类型参数的问题。另外,每次调用array.erase( itor );,被删除元素之后的内容会自动往前移,导致迭代漏项,应在删除一项后使itor--,使之从已经前移的下一个元素起继续遍历。

      53. 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]

      答:

      void* mymemcpy( void *dest, const void *src, size_t count )

      {

      char* pdest = static_cast( dest );

      const char* psrc = static_cast( src );

      if( pdest>psrc && pdest

      {

      for( size_t i=count-1; i!=-1; --i )

      pdest = psrc;

      }

      else

      {

      for( size_t i=0; i

      pdest = psrc;

      }

      return dest;

      }

      int main( void )

      {

      char str[] = "0123456789";

      mymemcpy( str+1, str+0, 9 );

      cout << str << endl;

      system( "Pause" );

      return 0;

      }

      54 线程与进程的区别

      55:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?

      56:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢?

      57:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?

      58:请问C++的类和C里面的struct有什么区别?

      59:请讲一讲析构函数和虚函数的用法和作用?

      60:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?

      61:一些寄存器的题目,主要是寻址和内存管理等一些知识。

      62:8086是多少位的系统?在数据总线上是怎么实现的?

    为您推荐

    2019年两会《政府工作报告》养老金新政策,要提高养老保障水平

    《关于2018年中央和地方预算执行情况与2019年中央和地方预算草案的报告》要求,提高养老保障水平。从2019年1月1日起,按平均约5%的幅度提高企业和机关事业单位退休人员基本养老金标准。

    2019-06-13 04:57

    如何在另类面试问题中胜出

    在面试中,有些考官会先提一个不甚友好的问题,或者劈头浇你一盆冷水,让你在委屈和激愤中露出本色。在他看来,击溃你的心理防线,才能筛选出有心理承受能力的智者,找到能面对压力的新鲜血液。要想在压力面试中胜出,只能学会绕开陷阱,奋战到底。

    2019-06-08 03:00

    面试紧张时应该怎么办

    面试是进入公职机关的最后一道主要的门槛,因此可以说每一位进入面试的人,心里就像绷住一根弦一样,也就是说每位考生,都会以高度的精神状态去抓住这次进入角色的机会。出现紧张、焦虑的心情也是不可避免的,只有认识了解,才能完全的克服。

    2019-06-08 02:58

    面对变故 学会自我解嘲

    面对降级、减薪、甚至解雇、离婚、丧子等变故,许多人反应过度,很长时间缓不过劲儿来。而有的人却能很快度过,重返正常的生活轨道。其决定因素是一种特殊的心理素质:心理复原力。有了它,人们不怕挫折;而缺少它,会特别害怕受伤害,不敢付出行动。

    2019-06-06 03:12

    办公室里该与不该谈论的话题

    办公室是一个充满原则、纪律,讲求策略的场合,更是一个充满利益冲突的是非之所。既如此,办公室里谈个人私事是否妥当呢?网上调查显示,尽管九成以上的人认为“办公室里隐私不宜说”,但是她/他们又同时承认有在办公室里谈论涉及私人感情、家庭关系、同事喜恶和上下级关系等隐私性内容的行为。

    2019-06-06 03:10

    面试自我介绍的几大原则

    应聘到外企或其他用人单位时,求职者往往最先被问及的问题就是“请先介绍介绍你自己”。这个问题看似简单,但求职者一定要慎重对待,它是你突出优势和特长,展现综合素质的好机会。回答得好,会给人留下良好的第一印象。

    2019-06-01 03:19

    外企面试必须要注意的五“必要”

    到外企面试前,仅仅准备好一份简历是不够的,还要提前做好面试前的“功课”,这样面试通过的几率就会大大增加。

    2019-06-01 03:16

    加载中...