问答题
请使用菜单命令或直接用VC6打开
下的工程proj2,实现一个自定义的字符串类MyString,重载取下标操作符([]),使类的对象能够通过下标取字符串的某位元素。如果下标越界,则返回第—个元素的值。
请在程序中//**********found**********之下一行的横线处填写适当的代码,并删除横线,使程序完整、正确。
输出结果为:
s
t
#include<iostream>
#include<cstring>
using nmnespace std;
class MyString
{
private:
char*str;
public:
MyString(char*s)
{
//**********found**********
str=new______;
strcpy(str, s);
}
~MyString()
{
//**********found**********
______;
}
char& operator[] (int i);
};
char& MyString::operator[](int i)
{
//**********found**********
if(______)
return str[i];
//**********found**********
return______;
}
int main()
{
MyString test("test string");
cout<<test[5]<<endl;
cout<<test[13]<<endl;
return 0;
}
【正确答案】
【答案解析】(1)char[strlen(s)+1]
(2)delete[]str
(3)i<strlen(str)
(4)str[0]
答案考生文件夹
[解析] 本题考查MyString类,涉及构造函数、析构函数、动态内存的分配与释放、字符串长度函数。
(1)主要考查构造函数的中成员变量的赋值、动态内存的分配和字符串长度函数的使用,成员变量str是字符串指针,赋值时使用new[]分配内存空间,为了存放字符串尾部的空字符,需要分配的容量为字符串str长度+1,另外使用strlen获取str的长度。
(2)主要考查考生对析构函数定义的掌握和动态内存的释放,MyString类的成员str是在构造函数中使用new[]分配的,所以在析构函数中需要使用delete[]释放。
(3)主要考查考生对字符串库函数调用的掌握,使用strlen获取str的长度,判断下标i是否越界。
(4)如果下标i越界,根据题意返回第一个元素str[0]。