作者:一加一等于贰_661 | 来源:互联网 | 2023-09-04 22:08
StringBad.h
#include
#ifndef STRINGBAD_H
#define STRINGBAD_H
class StringBad
{
private:char* str;int len;static int num_string;
public:StringBad();StringBad(const char* s);~StringBad();friend std::ostream& operator<<(std::ostream& os,const StringBad& st);
};
#endif
StringBad.cpp
#include "./StringBad.h"
#include
using namespace std;
int StringBad::num_string &#61; 0;StringBad::StringBad(const char* s)
{len &#61; strlen(s);str &#61; new char[len&#43;1];strcpy(str,s);num_string&#43;&#43;;cout << num_string << ":" << str << "对象被创建" << endl; }StringBad::StringBad()
{len &#61; 4;str &#61; new char[4];strcpy(str,"C&#43;&#43;");num_string&#43;&#43;;cout << num_string << ":" << str << "对象被创建" << endl;
}
StringBad::~StringBad()
{cout << str << "对象被销毁,\t" ; --num_string;cout << num_string << "个对象存在" << endl;delete []str;
}std::ostream& operator <<(std::ostream& os,const StringBad& st)
{os << st.str;return os;
}
main.cpp
#include
#include "StringBad.h"
using namespace std;
void callme1(StringBad& st)
{cout << "引用传递:" << st << endl;
};
void callme2(StringBad st)
{cout << "值传递:" << st << endl;
};
int main()
{StringBad st1("张飞");StringBad st2("李四");StringBad st3("王五");callme1(st1);cout << "输出st1:" << st1 << endl;callme2(st2);cout << "输出st2:" << st2 << endl;StringBad st4 &#61; st3;StringBad st5;st5 &#61; st1;
}
改进后的StringBad类
StringBad.h
#include
#ifndef STRINGBAD_H
#define STRINGBAD_H
class StringBad
{
private:char* str;int len;static int num_string;
public:StringBad();StringBad(const char* s);StringBad(const StringBad& st);~StringBad();StringBad& operator&#61;(const StringBad& st);friend std::ostream& operator<<(std::ostream& os,const StringBad& st);
};
#endif
StringBad.cpp
#include "./StringBad.h"
#include
using namespace std;
int StringBad::num_string &#61; 0;StringBad::StringBad(const char* s)
{len &#61; strlen(s);str &#61; new char[len&#43;1];strcpy(str,s);num_string&#43;&#43;;cout << num_string << ":" << str << "对象被创建" << endl; }StringBad::StringBad()
{len &#61; 4;str &#61; new char[4];strcpy(str,"C&#43;&#43;");num_string&#43;&#43;;cout << num_string << ":" << str << "对象被创建" << endl;
}
StringBad::StringBad(const StringBad& st)
{cout << "调用复制构造" << endl;num_string&#43;&#43;;len &#61; st.len;str &#61; new char[len&#43;1];strcpy(str,st.str); cout << num_string << ":" << str << "对象被创建" << endl;
}
StringBad::~StringBad()
{cout << str << "对象被销毁,\t" ; --num_string;cout << num_string << "个对象存在" << endl;delete []str;
}StringBad& StringBad::operator&#61;(const StringBad& st)
{if(this &#61;&#61; &st)return *this;delete [] str;len &#61; st.len;str &#61; new char[len&#43;1];strcpy(str,st.str);return *this;
}std::ostream& operator <<(std::ostream& os,const StringBad& st)
{os << st.str;return os;
}