部分c++ 面试题...
时间:2010-08-06 来源:LCL_data
前提 : 是做开发好还是继续做外包里的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。设计模式我只是了解单例模式,但是写出来的代码却不敢恭维。不熟悉的知识在面试时就别说?