网讯笔试归来
昨天去网讯(杭州)笔试了,做了下笔试题,感觉题目都不难,但是自己做的的确不怎么样,估计是没机会去了,不过暂时还是先把几道自己还记得的题目,写出来,总结下,以做复习。
1、 要求自己实现 String 类,给出了 String 类的以下头文件类声明
class String
{
public:
String(const char *m_char = NULL);
String(const String & Str);
String& operator = (const String &Str);
~String();
private:
char * m_Data;
};
关于 String 类的笔试题,以前看林锐的随笔时听说他在微软面试时曾碰到那么一道题目,我自己也没有真的下笔去做过,平常都是拿来就用的,这次自己碰到,才知道会死得那么惨,反正编得不堪入目(我就不拿出来献丑了),下面是我回来后,自己重新写的答案。
String::String(const char* m_char)
{
int m_nLength = strlen(m_char) + 1;
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}// 以上判断是否必要 ??
m_Data = new char[m_nLength];
memcpy(m_Data, m_char, m_nLength);
}
String::String(const String &Str)
{
int m_nLength = strlen(Str.m_Data) + 1;// 以前真的不知道,原来对象的私有变量
// 在类的实现代码中也是可以访问的
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}// 以上判断是否必要 ??
m_Data = new char[m_nLength];
memcpy(m_Data, Str.m_Data, m_nLength);
}
String& String::operator = (const String& Str)
{
if(this == &Str)
return *this;
int m_nLength = strlen(Str.m_Data) + 1;
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}// 以上判断是否必要 ??
m_Data = new char[m_nLength];
memcpy(m_Data, Str.m_Data, m_nLength);
return *this;
}
String::~String()
{
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}
}
2、 关于内存分配
这个题目很简单,就给了一个函数,然后问函数内的局部变量存放在哪里,我也不知道为什么当时会选择 heap( 堆 ) ,下面再把几个概念罗列出来:
1. 堆区( heap ):由程序员申请分配和释放,属动态内存分配方式,若程序员不释放,程序结束时可能会由 OS 回收。不过这个内存分配很容易引起问题,如果申请的内存不释放就会造成内存泄漏;如果释放的不是所要释放的内存,则轻者引起程序运行结果出错,重者系统崩溃。
2. 栈区( stack ):编译器自动分配释放,存放函数的形参值、局部变量的值,也是属于动态内存分配方式,它由系统分配,所以执行效率也高,不过自由度小,声明时就得决定其具体大小。
3. 全局区(静态区)( static ):全局变量和静态变量的存储是放在一块的,而且初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放,所以也不会造成内存问题。
除了以上的变量外,还有两类存放位置,文字常量区和程序代码区,两者都是由系统分配和释放,且文字常量区和前面三区合成为程序数据区,与程序代码区相对应。
3、 关于类继承的构造和析构函数
class Base
{
public:
Base(){cout<< "Base" <<endl;};
~Base(){cout<<"~Base"<<endl;};
protected:
private:
};
class First:public Base
{
public:
First(){cout << "First" << endl;};
~First(){cout << "~First" <<endl;};
};
int main()
{
Base *a = new First;
delete a;
}
问程序的输出会是什么?
结果很简单,也就是 Base
First
~Base
其它还有一个关于 & 的题目,把我搞的云里雾里的,还要再看些东西才知道怎么来解释。
posted on 2007-03-04 21:53
frank.sunny 阅读(3359)
评论(10) 编辑 收藏 引用 所属分类:
C/C++学习和实践