新手交作业:C++ PRIMER 中文第四版 习题13.4
习题13.4:
对于如下的类的简单定义,编写一个复制构造函数复制所有成员。复制pstring指向的对象而不是复制指针。
struct NoName {
NoName(): pstring(new std::string), i(0), d(0) {}
private:
std::string *pstring;
int i;
double d;
};
1、NoName头文件:
#include <string>
#ifndef NoNameH
#define NoNameH
struct NoName
{
NoName():pstring(new std::string), i(0), d(0) {}
//自己添加构造函数方便测试
NoName(const std::string&, int, double);
NoName(const NoName &is);
//自己添加的3个用于测试数据的简单函数
int geti() const;
double getd() const;
std::string gets() const;
private:
std::string *pstring;
int i;
double d;
};
#endif
#include "NoName.h"
#include <string>
NoName::NoName(const NoName &is):
//复制pstring指针指向的对象,而不复制指针
pstring(new std::string(*is.pstring)), i(is.i), d(is.d) {}
double NoName::getd() const
{ return d; }
int NoName::geti() const
{ return i; }
std::string NoName::gets() const
{ return *pstring; }
NoName::NoName(const std::string &str, int ival, double dval):
pstring(new std::string(str)), i(ival), d(dval) {}
#include "NoName.h"
#include <iostream>
using namespace std;
int main()
{
NoName test("I am Aka!", 31, 1.63 );
NoName now(test);
//测试now是否成功复制数据
cout << now.gets() << endl
<< now.geti() << endl
<< now.getd() << endl;
return 0;
}
NoName::NoName(const NoName &is)
{
pstring = new std::string(*is.pstring);
i = is.i;
d = is.d;
}