#include <iostream>
#include <string>
/* 分析:构造函数,析构函数,复制构造函数,赋值构造函数
* 根据 this 指针的地址可以辨别对象,不要被数据成员迷惑;
*/
using namespace std;
class TestClass{
public:
TestClass(char * name="temp");
TestClass(const TestClass & tc);
TestClass & operator=(const TestClass & tc);
~TestClass();
private:
string m_classname;
};
int main()
{
TestClass tc1("tc1");// 调用tc1的构造函数,可以使用n个构造参数
TestClass tc2 = "tc2";// 调用tc2的构造函数,只能一个构造参数时候使用
TestClass tc3 = TestClass("tc3");// 等效于tc1构造方法
TestClass tc4 = TestClass(tc1);// 调用临时对象的复制构造函数
TestClass tc5("tc5"); // 调用tc5的构造函数
tc5 = TestClass("tc6");// 调用tc5赋值构造函数
tc5 = TestClass(tc2);// 调用临时对象的复制构造函数和tc5赋值构造函数
return 0;
}
TestClass::TestClass(char * name){
this->m_classname = name;
cout << this << "-> " << m_classname << ": " << "构造函数" << endl;
}
TestClass::TestClass(const TestClass & tc){
this->m_classname = tc.m_classname;
cout << this << "-> " << m_classname << "-> from : 复制构造函数" << endl;
}
TestClass & TestClass::operator=(const TestClass & tc){
this->m_classname = tc.m_classname;
cout << this << "-> " << m_classname << "-> from := 赋值构造函数" << endl;
return *this;
}
TestClass::~TestClass(){
cout << this << "-> " << m_classname << ": " << "析构函数" << endl;
}
-------------------------------------------------------------------------------
winxp + codeblock 8.02 下编译通过
#include <string>
/* 分析:构造函数,析构函数,复制构造函数,赋值构造函数
* 根据 this 指针的地址可以辨别对象,不要被数据成员迷惑;
*/
using namespace std;
class TestClass{
public:
TestClass(char * name="temp");
TestClass(const TestClass & tc);
TestClass & operator=(const TestClass & tc);
~TestClass();
private:
string m_classname;
};
int main()
{
TestClass tc1("tc1");// 调用tc1的构造函数,可以使用n个构造参数
TestClass tc2 = "tc2";// 调用tc2的构造函数,只能一个构造参数时候使用
TestClass tc3 = TestClass("tc3");// 等效于tc1构造方法
TestClass tc4 = TestClass(tc1);// 调用临时对象的复制构造函数
TestClass tc5("tc5"); // 调用tc5的构造函数
tc5 = TestClass("tc6");// 调用tc5赋值构造函数
tc5 = TestClass(tc2);// 调用临时对象的复制构造函数和tc5赋值构造函数
return 0;
}
TestClass::TestClass(char * name){
this->m_classname = name;
cout << this << "-> " << m_classname << ": " << "构造函数" << endl;
}
TestClass::TestClass(const TestClass & tc){
this->m_classname = tc.m_classname;
cout << this << "-> " << m_classname << "-> from : 复制构造函数" << endl;
}
TestClass & TestClass::operator=(const TestClass & tc){
this->m_classname = tc.m_classname;
cout << this << "-> " << m_classname << "-> from := 赋值构造函数" << endl;
return *this;
}
TestClass::~TestClass(){
cout << this << "-> " << m_classname << ": " << "析构函数" << endl;
}
-------------------------------------------------------------------------------
winxp + codeblock 8.02 下编译通过