こんばんは。タイトルで申し訳ありませんが、問題についてこれ以上正確に説明することはできません。
次のコードは、次の場合を除いて、画面に何も表示しません。
1.最初に3つの未使用のコメント行を延期しましたが、これはいかなる種類の競合も発生しません。
2. main()で「Hello」を「Helloworld」に変更しない限り。
コードブロック10.05を使用しています。
完全なコード:
#include <iostream>
using namespace std;
class stringclass
{
protected :
inline bool success() { failbit = false; return true; } //line to ignore
inline bool fail() { failbit = true; return false; } //line to ignore
public :
bool failbit; //line to ignore
char * mystring;
long memsize;
long length;
void reset();
void alloc(long newsize);
void copy(const stringclass & other);
stringclass(const char str[]);
stringclass() {reset(); }
stringclass(const stringclass & other) {copy(other); }
~stringclass() {delete [] mystring;}
friend ostream& operator << (ostream& out, stringclass & obj) {out << obj.mystring; return out;}
};
void stringclass::reset()
{
delete [] mystring;
mystring = NULL;
length = 0;
memsize = 0;
}
void stringclass::alloc(long newsize)
{
delete [] mystring;
mystring = new char[newsize];
memsize = newsize;
mystring[0] = 0;
length = 0;
}
void stringclass::copy(const stringclass & other)
{
if(other.mystring == NULL) reset();
else
{
alloc(other.memsize);
strcpy(mystring, other.mystring);
length = strlen(mystring);
}
}
stringclass::stringclass(const char str[])
: mystring(NULL), memsize(0), length(0)
{
if(str == NULL) reset();
else
{
alloc(strlen(str) + 1);
strcpy(mystring, str);
length = strlen(mystring);
}
}
int main()
{
stringclass str = "Hello";
stringclass str2 = str;
cout << "str = " << str << endl;
cout << "str2 = " << str2 << endl;
cout << endl;
system("PAUSE");
return 0;
}
コードは次のように表示されます。
str =
str2 =
Press any key to continue...
コード変更後1.:
str = Hello
str2 = Hello
Press any key to continue...
コード変更後2.:
str = Hello world
str2 = Hello world
Press any key to continue...