#include <iostream> using namespace std; class String { public: String(); // 构造函数 相当于初始化一个梦。。。这个梦的参数是空的。。。正常人做梦应该都是这样子的。。。 String( char const & ch ); // 构造函数 也是初始化一个梦。。也就是说我们我们人类可以通过多个方法实现做梦。。(比如说自然入睡,还有催眠入睡) 可见这个梦是有参数的。。。打个比方说,现在将我想梦到的东东传递给你。。那我们就有可能做同一个梦。。当然决定权在你手上。。。 String(String const& str); // 拷贝构造函数 如果我想让你和我必须做同一个梦怎么办呢?那么必须把我的梦copy给你。。。这就是盗梦。。。这个事件发生在你还没有开始做梦时。。 ~String(); // 析构函数 当你醒来的那一刹那。。人的大脑会自动释放掉你所做的梦。。如果你还记得说明存在内存泄漏。。如果长期这样你就可以去看医生了。。。检查检查是不是硬件的问题。。是不是内存条松了。。(如果是这样这就好办了。。把下来重新插上就OK 了。。) 如果不是这样。。。 String& operator= (char const& ch); // 赋值函数 前面说到通过拷贝构造函数可以将别人的梦传给你。。这个是在你还没有开始做梦的情况下。。如果你已经开始做梦,这时我还想用"="操作符传递一些信息给你。。这时就不会调用拷贝构造函数了。。而是通过你重载的赋值函数。。。( 传东东... ) String& operator=(String const& str); // 赋值函数 当然传的东西不同所调用的赋值函数也不是一样的 。。。( 传梦... ) }; String::String() { cout<<"Constraction 1"<<endl; } String::String( char const & ch ) { cout<<"Constraction 2"<<endl; } String::String( String const & str ) { cout<<"Copy Constraction"<<endl; } String::~String() { cout<<"Destraction"<<endl; } String& String::operator=( char const& ch ) { cout<<"Assign operator 1 ..."<<endl; return *this; } String& String::operator=(String const& str) { cout<<"Assign operator 2 ..."<<endl; return *this; } int main() { cout<<"***** Main *****"<<endl; String str_a; // 构造函数1 执行。。 String str_c('abc'); // 构造函数2 执行。。 String str_b = str_a; // 这时str_b 还位初始化。。调用拷贝构造函数。。 str_b = 'abc'; // 这时str_b 已初始化调用赋值函数1 str_b = str_a; // 调用赋值函数2 getchar(); } // 脱离作用域调用析构函数。。 梦的过程如下: ***** Main ***** Constraction 1 Constraction 2 Copy Constraction Assign operator 1 ... Assign operator 2 ... Destraction Destraction Destraction // 3个对象3次释放。。Right 没的说~ 总是喜欢把学到的那一点东东拿出去抖落抖落,虽然很尿,但决不放气。。