//String class: class with pointers members
#ifndef __STRING__
#define __STRING__
class String
{
public:
String(const char* cstr=0); //constructor
String(const String& str); //copy constructor
String& opeartor=(const String& str);//copy assignment operator
char* get_c_str() const {return m_data};
private:
char* m_data;
};
#endif
//BIG Three in a class:copy constructor,copy assignment operator(op=) and destructor
int main(){
String s1();
String s2("hello");
string s3(s1); //copy constructor
cout << s3 <<end1;
s3 = s2; //copay assignment
cout << s3 <<end;
}
//copy constructor function
inline
String:: String(const char* cstr ==0)
{
if(cstr){
m_data= new char[strlen(cstr)+1];
strcpy(m_data,cstr);
}
else{
m_data = new char[1];
m_data='\0';
}
}
inline
String:: String()
{
delete [] m_data;
}
main()
{
String s1();
String s2("hello"); //s1 and s2 can invoke ~String()
String* p = new String("hello"); //p is a pointer, should be delete manually
delete p;
}
//copy assignment operator String&: means call reference of class String
inline
String& String::operator= (const String& str)
{
if(this == &str) //object str's address: &str
return *this; //self assignment checking
//this is a pointer, point to current object,members can be accessed by this pointer
delete[] m_data;
m_data = new char[strlen[str.m_data]+1];
strcpy(m_data, str.m_data);
return *this;
}
main()
{
String s1("hello");
String s2(s1);
s2 = s1;
}