部分C++ 面试题

前提 : 是做开发好还是继续做外包里的sub lead好,我不知道,我只知道当我的程序运行起来时我非常有成就感!

 

共有4题,这里先说题目,给大家想一想:

1.const在函数声明时的作用

2.解释一下dynamic_cast

3.写单例模式的代码

4..字符串反转,例子"I am good",期望结果"good am I".

 

解析:

1。const在函数声明时的作用

这个题目说的很泛,可以在好几个地方,我问面试官你要问的是不是const在函数参数表与函数体之间时的作用,他确认后,我的理解:

不能修改参数对象的成员函数。

我的理解是对的。

 

2。解释一下dynamic_cast

可能是太紧张,脑袋想不出什么是dynamic_cast,但是还是记得类型转换。我就说了下我对类型转换的理解。

正确的理解应该是dynamic_cast被用来执行从基类指针到派生类指针的安全转换,常常被称为安全的向下转换。转换的类类型必须(基类)必须有虚函数,否则不能使用dynamic_cast。当我们必须使用派生类的特性,而该特性有没有出现在基类中时,常常使用dynamic_cast.包含的头文件是<type_info>

 

3.写单例模式的代码

我的理解:我记得是要定义一个私有的变量用来申请实例控制实例的个数,但是我的代码陷入了重复跳用:

class test

{

     private :

      test * single= null;

     public :

     test()

     {

       if(single ==null)

       {

         test t =new test();

         single =t;

       }

    }

}

我在构造函数里吗有跳用了构造函数,陷入了死循环。

正确的代码应该是,构造函数应该是私有的空的,用public的方法去实例化该类:

class CSingleton:
  {
  // 其它成员
  public:
 static CSingleton * GetInstance()
   {
    if (m_pInstance == NULL)
   m_pInstance = new CSingleton();
  return m_pInstance;
 }

  private:
   CSingleton(){};
   static CSingleton * m_pInstance;
  }

 

4。字符串反转,例子"I am good",期望结果"good am I".

题目其实很简单,我用了3种方法:

1。用了c#里面的string 里面的split .

2。格外开闭了和原数组大小+1的字符数组,直接扫描原数组来从后面开始填充新数组。我觉的细节不用说了

3。扫描一遍,利用2个标记来标明单词,是单词的话就放到vector<string>里面,后面再拼字符串

 

但是上面的后2种方法都格外申请了空间(貌似2中算法思想是一样的),不是最优的算法

1。先反转整个字符串,在反转单个单词

2。利用循环移位的思想,一次移位一个单词。

 

总结:

1。自己的c++理解还不够

2。思维还不够灵活,让我想单词反转我肯定能写出来,但是反转字符串的时候没想到用这个方法

3。设计模式我只是了解单例模式,但是写出来的代码却不敢恭维。不熟悉的知识在面试时就别说?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值