C++ Primer 第五版 中文版 练习 13.22
题目:假定我们希望HasPtr的行为像一个值。即,对于对象所指向的string成员,每个对象都有一份自己的拷贝。
我们将在下一节介绍拷贝控制成员的定义。
但是你已经学习了定义这些成员所需的所有知识。在继续学习下一节之前,为HasPtr编写拷贝构造函数和拷贝赋值运算符。
答:
由于我用的是vs 2013所以生成的头文件会多一个 #pragma once 宏命令。
HasPtr.h
#pragma once
#include <string>
class HasPtr
{
public:
HasPtr(const std::string &s = std::string()) :ps(new std::string(s)), i(0) {}
//拷贝构造函数
HasPtr(const HasPtr&);
//拷贝赋值运算符
HasPtr& operator=(const HasPtr&);
private:
std::string *ps;
int i;
};
HasPtr.cpp
#include "HasPtr.h"
using namespace std;
HasPtr::HasPtr(const HasPtr &HP) :ps(new string(*(HP.ps))), i(HP.i)
{
}
HasPtr& HasPtr::operator=(const HasPtr &HP)
{
ps = HP.ps;
i = HP.i;
return *this;
}