CC++及数据结构笔试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C/C++及数据结构笔试题集锦
一:已知类String的原型为:
class String
{
public:
String(const char *str = NULL); //普通构造函数
String(const String ?); //拷贝构造函数
~String(void); //析构函数
String & operator = (const String ?); //赋值构造函数
private:
char * m_data; //用于保存字符串};
请编写String的上述4个函数。
答案:
版本1:
// String 的析构函数
String::~String(void) // 3 分
{
delete [] m_data;
// 由于m_data 是内部数据类型,也可以写成delete m_data;
}
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1]; // 若能加NULL 判断则更好
*m_data = …{post.content}‟;
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加NULL 判断则更好
strcpy(m_data, str);
}
}
// 拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加NULL 判断则更好
strcpy(m_data, other.m_data);
}
// 赋值函数
String & String:operate =(const String &other)
{
// (1) 检查自赋值
if(this == &other)
return *this;
// (2) 释放原有的内存资源
delete [] m_data;
// (3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加NULL 判断则更好strcpy(m_data, other.m_data);
// (4)返回本对象的引用
return *this;
}
版本2
String::String (const char *str)
{
if(str){
memset(m_data,0,strlen(m_data));
strcpy(m_data,str);
}
else *m_data=0;
}
String::String (const String ?)
{
strcpy(m_data,copy.m_data);
}
String& String:operator =(const String ?)
{
if(this==?) retrun *this;
strcpy(m_data,copy.m_data);
return *this;
}
版本3
String::String (const char *str)
{
if ( m_data )
delete[] m_data;
if(str){
m_data = new char[strlen(str)];
memset(m_data,0,strlen(m_data));
strcpy(m_data,str);
}
else *m_data=0;
}
String::String (const String ?)
{
if ( m_data )
delete[] m_data;
m_data = new char[strlen(copy.m_data+1)]
strcpy(m_data,copy.m_data);
}
String& String:operator =(const String ?)
{
if(this==?) retrun *this;
if ( m_data )
delete[] m_data;
m_data = new char[strlen(copy.m_data+1)]
strcpy(m_data,copy.m_data);
return *this;
}
~String::String(void)
{
if ( m_data )
delete[] m_data;
}
二:改错题,只能在原来的基础上增加代码,不能删除代码#include
#include
void foo(int age,char *b)
{
b = (char *)malloc(64);
sprintf(b,"Your Age is %d",age);
}
int main()
{
char *f;
foo(23,f);
printf("%s\n",f);
}