#include <string.h>
using namespace std;
class xuStr
{
private:
char* data;
public:
xuStr(const char* cp=””);
~xuStr(){delete [] data;}
};
xuStr::xuStr(const char *cp):data(new char[strlen(cp)+1]){
strcpy(data,cp);
}
看不懂构造函数的语法,谁能详细解释下?
using namespace std;
class xuStr
{
private:
char* data;
public:
xuStr(const char* cp=””);
~xuStr(){delete [] data;}
};
xuStr::xuStr(const char *cp):data(new char[strlen(cp)+1]){
strcpy(data,cp);
}
看不懂构造函数的语法,谁能详细解释下?
解决方案
10
先给data分配空间,也就是data = new char[strlen(cp)+1];
然后再strcpy赋值,也就是strcpy(data,cp);
然后再strcpy赋值,也就是strcpy(data,cp);
5
xuStr::xuStr(const char *cp):data(new char[strlen(cp)+1]){
strcpy(data,cp);
1、先申请内存,内存大小由cp所指向的字符串加1决定大小,然后将指针data指向改内存。
2、拷贝cp指向的字符串到data所指的内存空间。
strcpy(data,cp);
1、先申请内存,内存大小由cp所指向的字符串加1决定大小,然后将指针data指向改内存。
2、拷贝cp指向的字符串到data所指的内存空间。
10
声明时: xuStr(const char* cp=””);
构造函数没有返回值,函数名与类名相同。后面形参表中有一个默认值。
定义时:
xuStr::xuStr(const char *cp):data(new char[strlen(cp)+1]){
strcpy(data,cp);
}
构造函数中用初始化列表(构造函数的特有形式,一般函数是没有的)来初始化data成员,初始化列表要用()来处理,不是=。
首先分配了data的空间,函数体内在具体赋值。
构造函数没有返回值,函数名与类名相同。后面形参表中有一个默认值。
定义时:
xuStr::xuStr(const char *cp):data(new char[strlen(cp)+1]){
strcpy(data,cp);
}
构造函数中用初始化列表(构造函数的特有形式,一般函数是没有的)来初始化data成员,初始化列表要用()来处理,不是=。
首先分配了data的空间,函数体内在具体赋值。