大家帮我看看下面这道题目?

来源:百度知道 编辑:UC知道 时间:2024/06/23 22:39:42
设有一个简单的字符串类:
class String{
char *ptr;
int len;
public:
String(char* s==NULL);
String(String &t);
bool isIn(char c);
void Print() {if(ptr) cout<<ptr<<'\n';}
~String();
};
其中,构造函数String(char* s)将s所指字符串送到ptr所指动态内存中;复制构造函数String(String& t)将对象t中的字符串复制到当前对象中;成员isIn(char c)判断字符串中是否包含指定的字符c;析构函数~String()释放ptr所指动态内存中,首先完成上述4个成员函数的定义,然后设计一个main()函数,定义String类的对象,充分测试所定义的类String。
#include <iostream>
#include <cstring>
using namespace std;

class String{
char *ptr;
int len;
public:
String(char* s==NULL);
String(String &t);
bool isIn(char c);
void Print() {if(ptr) cout<<ptr<<'\n';}
~String();
};

String::String(char* s)
{String a;
a.len=strlen(s);
a.ptr=new char[a.len+1];
strcpy(a.ptr,s);
cout<<"构造函数被调用";
}

String::String(&t)
{St

复制构造函数无法实现,因为ptr和len均为私有成员,而且没有相应的get函数。

//---------------------------------------------------------------------------
#include <iostream>
#include <cstring>
using namespace std;

class String{
char *ptr;
int len;
public:
String(char* s=NULL);
String(String &t);
bool isIn(char c);
void Print() {if(ptr) cout<<ptr<<'\n';}
~String();
};

String::String(char* s)
{
char *str=new char[strlen(s)+1];
strcpy(str,s);
str[strlen(s)]=0;
ptr=str;
len=strlen(ptr);
cout<<"构造函数被调用";
}

bool String::isIn(char c)
{
for(int i=0;i<len;i++)
if(*(ptr+i)==c) return true;
return false;
}

String::~String()
{
delete[] ptr;
cout<<"析构函数被调用"
}

int main(void)
{String a("what");
cout<<a;<