智能指针
#include <iostream>
using namespace std;
class person
{
public:
int age;
person(int age);
~person();
private:
};
person::person(int age)
{
this->age = age;
}
person::~person()
{
}
class capacity_person
{
public:
person* p;
capacity_person(person* p);
~capacity_person();
person* operator->() {
return p;
}
person& operator*() {
return *p;
}
private:
};
capacity_person::capacity_person(person* p)
{
this->p = p;
}
capacity_person::~capacity_person()
{
delete p;
cout << "p以销毁" << endl;
}
int main() {
capacity_person cp(new person(10));
cout << cp->age << endl;
cout << (*cp).age << endl;
return 0;
}
重载=、深拷贝
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class person
{
public:
int age;
char* name;
person():age(age),name(NULL){}
person(int age,const char* name);
~person();
person& operator=(const person &p){
this->age = p.age;
this->name = new char[strlen(p.name) + 1];
strcpy(this->name, p.name);
return *this;
}
private:
};
person::person(int age,const char* name):age(age),name(new char[strlen(name)+1]){
strcpy(this->name,name);
}
person::~person()
{
delete[] name;
}
void test() {
person p1(10,"zhangsan");
person p2;
p2 = p1;
cout << p1.age << " " << p1.name << endl;
cout << p2.age << " " << p2.name << endl;
}
int main() {
test();
return 0;
}
==、!=
#include <iostream>
using namespace std;
class person
{
public:
int age;
string name;
person(int age,string name);
~person();
bool operator==(person p) {
return this->age == p.age && this->name == p.name;
}
bool operator!=(person p) {
return this->age != p.age || this->name != p.name;
}
private:
};
person::person(int age,string name):age(age),name(name){}
person::~person()
{
}
int main() {
person p1(10,"zhangsan");
person p2(20, "lisi");
person p3(10, "zhangsan");
if (p1 == p2) {
cout << "p1和p2相等" << endl;
}
else {
cout << "p1和p2不相等" << endl;
}
if (p1 != p3) {
cout << "p1和p3不相等" << endl;
}
else {
cout << "p1和p3相等" << endl;
}
return 0;
}