构造函数、拷贝构造函数、拷贝赋值运算符的使用
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
class HasPtr{
public:
//构造函数
HasPtr(const string &s=string()):
ps(new string(s)),i(0) { cout <<"构造函数"<<endl;}
//拷贝构造函数
HasPtr(const HasPtr &hp);
//拷贝赋值运算符
HasPtr& operator=(const HasPtr &rhs);
//析构函数
~HasPtr(){}
private:
string *ps;
int i;
};
//拷贝构造函数
HasPtr::HasPtr(const HasPtr &hp){
cout <<"拷贝构造函数"<<endl;
ps = new string(*hp.ps);
i=hp.i;
}
//拷贝赋值运算符
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
cout <<"拷贝赋值运算符"<<endl;
auto newps=new string(*rhs.ps);
delete ps;
ps=newps;
i=rhs.i;
return *this;
}
int main(){
//创建对象时用构造函数
HasPtr HP1;
HasPtr HP2;
//使用一个对象通过拷贝方式创建另一个对象时用拷贝构造函数
HasPtr HP3=HP1;
//单纯的把一个对象的值赋值给另一个对象时用拷贝赋值运算符
HP2=HP1;
system("pause");
return 0;
}