C++ Primer 5th Edition Exercises(练习题)13.28

Exercise 13.28: Given the following classes, implement a default constructor and the necessary copy-control members.

(a)class TreeNode {private:std::string value;int count;TreeNode *left;TreeNode *right;};(b)class BinStrTree {private:TreeNode *root;};

如下类别,请试着实作出它们的预设建构器(default constructor)和必要的拷贝控制成员。

TreeNode.h

#ifndef TREENODE_H#define TREENODE_H#include<string>class TreeNode{public:    TreeNode() : count(0), left(nullptr), right(nullptr), user_cntr(new size_t(1)) {};//预设建构器(default constructor)    TreeNode(const std::string& s) :value(s),        count(s.size()), left(new TreeNode[s.size()]), right(left + s.size() - 1), user_cntr(new size_t(1)) {}//预设建构器    //拷贝建构器    TreeNode(const TreeNode& tn) :        value(tn.value), count(tn.count), left(tn.left), right(tn.right),user_cntr(tn.user_cntr) {        ++* user_cntr;    }    ~TreeNode() {        if (-- * user_cntr == 0) {            delete[]left;            //left = nullptr; right = nullptr;            delete user_cntr;        }    }    TreeNode& operator=(const TreeNode& rhs) {        ++* rhs.user_cntr;        if (--*user_cntr==0)        {            delete[]left;            //left = nullptr; right = nullptr;            delete user_cntr;        }        value = rhs.value;        count = rhs.count;        left = rhs.left;        right = rhs.right;        user_cntr = rhs.user_cntr;        return *this;    }private:    std::string value;    int count;    TreeNode* left;//由此想到动态阵列(动态配置多个物件);再由new[]想到要解构delete[]    TreeNode* right;    size_t* user_cntr;};#endif // !TREENODE_H

BinStrTree.h

#ifndef BINSTRTREE_H#define BINSTRTREE#include"TreeNode.h"class BinStrTree{public:    //BinStrTree():root(nullptr){}//预设建构器    BinStrTree(const std::string& s=std::string()):root(new TreeNode(s)),user_cntr(new size_t(1)){}    BinStrTree(TreeNode* tnp):root(tnp),user_cntr(new size_t(1)){}    //拷贝建构器    BinStrTree(const BinStrTree& bst) :root(bst.root), user_cntr(bst.user_cntr){++* user_cntr;}    //拷贝指定运算子    BinStrTree& operator=(const BinStrTree & bst ){        ++*bst.user_cntr;        if (--*user_cntr==0)        {            delete root;            delete user_cntr;        }        root = bst.root;        user_cntr = bst.user_cntr;        return *this;    }    //解构器    ~BinStrTree() {        if (-- * user_cntr == 0) {            delete root;            delete user_cntr;        }    }private:    TreeNode* root;    size_t* user_cntr;};#endif // !BINSTRTREE_H

.cpp

#include<string>#include"TreeNode.h"#include"BinStrTree.h"using namespace std;int main() {    TreeNode tn,tn1("孙守真"),tn2(string("阿弥陀佛"));    tn = tn1;    TreeNode tn3(tn2);    tn = tn2;    tn1 = tn3;    BinStrTree bst("妙音如来"),bst1(bst),bst2,bstp(new TreeNode(tn3));    bst2 = bst;    bstp = bst2;}

https://github.com/oscarsun72/prog1-C-Primer-5th-Edition-s-Exercises/tree/exercise13_28a/prog1

脸书直播实境秀


C++自修入门实境秀 542 重新译撰 《C++ Primer 5th》
13.2 拷贝控制与资源管理 13.2.2. Defining Classes That Act Like Pointers Defining a Reference-Counted Class~ 练习13.28
上一集:
https://www.facebook.com/100003034306665/videos/2659180040859780
下一集:
全部:http://bit.ly/2NoA2ID 原档下载:http://bit.ly/2Ixe2Vc
课文: http://bit.ly/2FIHV57
http://bit.ly/2mttmfa(第二篇)
第10-11章: http://bit.ly/2MuPmiZ
章12: http://bit.ly/2Rw53sH
重译12章:http://bit.ly/2V8UgZ7
http://bit.ly/2G2fPSg (docx)
重译11章:http://bit.ly/39P7HRU
第三篇:http://bit.ly/2UaFbDY
第三篇13章:http://bit.ly/33mh49y

https://play.google.com/books/reader?id=J1HMLyxqJfgC&pg=GBS.PT951.w.0.0.0.0.1

讲义下载:
http://bit.ly/2khF8Ic (全部)
程式码:
https://github.com/oscarsun72/prog1

缘起:http://bit.ly/2XwHOUH


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章