1000. MyString Class
3358 ワード
Description
次のようにMyStringクラスを定義します.このクラスには、構造関数、コピー構造関数、構造関数、メンバー関数、および静的メンバー関数があり、C文字列ポインタ変数と静的メンバー変数numberOfObjectsがあります.クラスの実装を完了してください.
class MyString
{
public:
MyString(const char*);
MyString(int = 0, char = '\0'); //initialize size_t number of char, terminated with '\0'
MyString(const MyString&); //copy constructor
~MyString(); //destructor
const char* c_str(); //return private char*
static int getNumberOfObjects();
private:
char *str;
static int numberOfObjects; //count the number of MyString objects
};
クラスの定義とその完全な実装を提出してください.
Sample Input
Sample Output
Hint
クラスのコンストラクション関数、リロード、静的メンバー変数、およびその初期化、newおよびdeleteの使用、深いコピーをよく理解してください.テストデータにメモリ不足は発生しません.
主関数の形式は、int main(){MyString ms 1(5,'c');cout<c_str() << endl; delete ptr_ms2; cout << MyString::getNumberOfObjects() << endl; return 0; }
次のようにMyStringクラスを定義します.このクラスには、構造関数、コピー構造関数、構造関数、メンバー関数、および静的メンバー関数があり、C文字列ポインタ変数と静的メンバー変数numberOfObjectsがあります.クラスの実装を完了してください.
class MyString
{
public:
MyString(const char*);
MyString(int = 0, char = '\0'); //initialize size_t number of char, terminated with '\0'
MyString(const MyString&); //copy constructor
~MyString(); //destructor
const char* c_str(); //return private char*
static int getNumberOfObjects();
private:
char *str;
static int numberOfObjects; //count the number of MyString objects
};
クラスの定義とその完全な実装を提出してください.
Sample Input
Sample Output
ccccc
Hello!
1
Hint
クラスのコンストラクション関数、リロード、静的メンバー変数、およびその初期化、newおよびdeleteの使用、深いコピーをよく理解してください.テストデータにメモリ不足は発生しません.
主関数の形式は、int main(){MyString ms 1(5,'c');cout<
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
class MyString
{
public:
MyString(const char*);
MyString(int = 0, char = '\0'); //initialize size_t number of char, terminated with '\0'
MyString(const MyString&); //copy constructor
~MyString(); //destructor
const char* c_str(); //return private char*
static int getNumberOfObjects();
private:
char *str;// 。 new 。
static int numberOfObjects; //count the number of MyString objects
};
int MyString::numberOfObjects=0;
MyString::MyString(const char* MyChar)
{
str=new char[strlen(MyChar)];
strcpy(str,MyChar);//ok
//str= MyChar;
numberOfObjects++;
}
MyString::MyString(int length, char tail)
{
numberOfObjects++;
str=new char[length];
for(int i=0;i<length;i++)
{
str[i]=tail;
}
str[length]='\0';
// string char* .
/*numberOfObjects++;
string ss;
str=new char[length];
for(int i=0;i<length;i++)
{
ss+=tail;
}
ss.copy(str,length,0);
str[length]='\0';
*/
}
MyString::MyString(const MyString& mystring)
{
str=new char[strlen(mystring.str)];// !
strcpy(str,mystring.str); // 。
numberOfObjects++;
mystring.numberOfObjects=numberOfObjects;
//mystring.str=str; str , = 。
}
MyString::~MyString()
{
numberOfObjects--;
}
const char* MyString::c_str()
{
return str;
}
int MyString::getNumberOfObjects()
{
return numberOfObjects;
}
int main()
{
MyString ms1(5, 'c');
cout << ms1.c_str() << endl;
MyString *ptr_ms2 = new MyString("Hello!");
{
MyString ms3(ms1);
}
cout << ptr_ms2->c_str() << endl;
delete ptr_ms2;
cout << MyString::getNumberOfObjects() << endl;
return 0;
}