c++ Primer 5 12.1.6节练习 (头文件相互包含的问题及解决办法)

12.19

拿此题来说,StrBlobPtr类要用到StrBlob类,而StrBlob类要用到StrBlobPtr类。

即如下:

class StrBlob{
friend class StrBlobPtr;
public:
	typedef std::vector<std::string>::size_type size_type;
	StrBlob();//默认构造函数
	StrBlob(std::initializer_list<std::string>);//接收1个参数的initializer_list作为形参
	size_type size() const { return data->size(); }
	bool empty() const { return data->empty(); }
	void push_back(const std::string &t) { return data->push_back(t); }
	void pop_back();
	std::string& front();
	std::string& back();
	StrBlobPtr begin() { return StrBlobPtr(*this); }//返回一个指向首元素的迭代器
	StrBlobPtr end(){ auto ret = StrBlobPtr(*this, this->size()); return ret; }//返回尾后的迭代器
private:
	std::shared_ptr<std::vector<std::string>> data;//一个指向vector<string>的智能指针
	void check(size_type i, const std::string &msg) const;//检查data[i]是否合法,抛出异常
};

class StrBlobPtr{

public:
	StrBlobPtr() :curr(0) { }//默认构造函数,令curr为0
	StrBlobPtr(StrBlob &a, size_t t = 0) :wptr(a.data), curr(t)  { }//带参数的构造函数
	string & deref() const;//解引用操作
	StrBlobPtr & incr();//递增操作
private:
	shared_ptr<vector<string>> check(size_t, const string&) const;//检查下标是否过界
	weak_ptr<vector<string>> wptr;//定义一个空的weakptr
	size_t curr;//定义元素下标
};

可以看到这两个类要相互包含,那么该怎样处理?

1.如果两个都在各自的.h中,并且相互包含对方的.h,不用前置声明。

即在StrBlob.h文件中 #include "StrBlobPtr.h" 在StrBlobPtr.h文件中 #include "StrBlob.h"

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值