标签:
#include <iostream> #include <cstring> using namespace std; class mString { public: mString(const char * buf)//有参构造函数 :m_buf(strcpy(new char[strlen(buf) + 1 ],buf) ) { } mString(const mString& that)//拷贝构造函数 :m_buf(strcpy(new char[strlen(that.m_buf)+1],that.m_buf) ) { } virtual ~mString() { if(m_buf) { delete m_buf; } } const mString& operator=(const mString& that)//拷贝赋值 { if(&that != this) { if(m_buf) delete[] m_buf; m_buf = strcpy(new char[strlen(that.m_buf)+1],that.m_buf); } return *this; } const mString& operator=(const char * buf)//拷贝赋值 { delete[] m_buf; m_buf = new char[strlen(buf)+1]; return *this; } friend const mString operator+(const mString& left,const mString& right)//重载+(友元函数 非成员函数版本) { char * tbuf = new char[ strlen(left.m_buf)+strlen(right.m_buf)+1 ]; mString tt(strcat(strcpy(tbuf,left.m_buf),right.m_buf) ) ;//调用有参构造 delete[] tbuf; return tt; } const char* mc_str()const { return m_buf; } void print()const { cout<<mc_str()<<endl; } private: char * m_buf; }; int main() { mString str1("aaaa");//有参构造 str1.print(); cout<<"----------"<<endl; mString str2="bbbb";//拷贝赋值 str2.print(); cout<<"----------"<<endl; mString str3= str1+str2;//重载+ str3.print(); cout<<"----------"<<endl; mString str4(str3);//拷贝构造 str4.print(); cout<<"----------"<<endl; const char* (mString::*pfn)()const = &mString::mc_str;//常函数也要加上标识 cout<<(str1.*pfn)()<<endl; cout<<"----------"<<endl; void (mString::*pfn2)()const = &mString::print; mString *pStr =&str2; (pStr->*pfn2)(); getchar(); return 0; }
标签:
原文地址:http://my.oschina.net/mlgb/blog/361724