C++学习,第三十六课
已有 481 次阅读2014-8-26 11:02
|个人分类:作业
#include<iostream>
#include<string>
class MyClass
{
public:
MyClass(int *p);
MyClass(const MyClass &rhs);
~MyClass();
MyClass &operator = (const MyClass &rhs);
void print();
private:
int *ptr;
};
MyClass::MyClass(int *p)
{
std::cout << "进入主构造器\n";
ptr = p;
std::cout << "离开主构造器\n";
}
MyClass::MyClass(const MyClass &rhs)
{
std::cout << "进入副构造器\n";
*this = rhs;
std::cout << "离开副构造器\n";
}
MyClass::~MyClass()
{
std::cout << "进入解析器\n";
delete ptr;
std::cout << "离开解析器\n";
}
MyClass &MyClass::operator=(const MyClass &rhs)
{
std::cout << "进入赋值语句重载\n";
if (this != &rhs)
{
/*将rhs拷贝到this*/
//std::cout << "\n" << "ptr= " << ptr << "\t"<<*ptr<<"\n";
delete ptr;/*删除新建的这段内存,(对于obj1=obj2,而对于MyClass obj4=obj3没有用)*/
ptr = new int;/*重新新建一段内存*/
*ptr = *rhs.ptr;
}
else
{
std::cout << "等号两边的对象相同,不能copy" << "\n\n";
}
std::cout << "离开赋值语句重载\n";
return *this;
}
void MyClass::print()
{
std::cout << *ptr << "\n";
}
int main()
{
MyClass obj1(new int(1));
MyClass obj2(new int(2));
obj2 = obj1;
obj1.print();
obj2.print();
std::cout << "---------------------------------\n";
MyClass obj3(new int(3));
MyClass obj4 = obj3;
obj3.print();
obj4.print();
std::cout << "---------------------------------\n";
MyClass obj5(new int(5));
obj5 = obj5;
obj5.print();
system("pause");
return 0;
}