C++ Primer(第5版) 练习 13.28
练习 13.28 给定下面的类,为其实现一个默认构造函数和必要的拷贝控制成员。
( a )
class TreeNode{private:string value;int count;TreeNode *left;TreeNode *right;
};
( b )
class BinStrTree{private:TreeNode *root;
};
环境:Linux Ubuntu(云服务器)
工具:vim
代码块
( a )
class TreeNode {
private:std::string value;int count;TreeNode *left;TreeNode *right;public:TreeNode(const std::string& val = std::string(), int cnt = 0): value(val), count(cnt), left(nullptr), right(nullptr) {}TreeNode(const TreeNode& other): value(other.value), count(other.count) {left = other.left ? new TreeNode(*other.left) : nullptr;right = other.right ? new TreeNode(*other.right) : nullptr;}~TreeNode() {delete left;delete right;}TreeNode& operator=(const TreeNode& other) {if (this != &other) {TreeNode tmp(other);std::swap(value, tmp.value);std::swap(count, tmp.count);std::swap(left, tmp.left);std::swap(right, tmp.right);}return *this;}
};( b )
class BinStrTree {
private:TreeNode *root;public:BinStrTree() : root(nullptr) {}BinStrTree(const BinStrTree& other) {root = other.root ? new TreeNode(*other.root) : nullptr;}~BinStrTree() {delete root;}BinStrTree& operator=(const BinStrTree& other) {if (this != &other) {BinStrTree tmp(other); // Copy-constructorstd::swap(root, tmp.root);}return *this;}
};