请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

类的公有私有变量

bobobo老师,
为什么你写层次遍历的时候把实现都放在了public中,
有关Node的都是传一个参数到private中的函数实现阿
什么时候要放在public, 什么时候放private?

正在回答

1回答

public 就是留给用户调用的接口;


private 就是希望对用户屏蔽的函数,不希望用户通过类对象进行调用:)


和 Node 相关的函数,都是私有的,是因为 Node 本身就是私有的,是用户不知道的细节。

用户使用你的BST类,不需要知道里面用了什么Node,是链式结构还是数组结构,Node里面有几个指针,存了哪些信息。用户可以使用你的BST类存储,读取,改写,删除内容,就可以了。

可以根据这个原则,在研究一下,课程的代码,哪些我设置成了public,哪些我设置成了private。为什么?


什么时候 public,什么时候 private,不是语法规定的,是设计者自己规定的。但原则是上面的原则:)


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 苏丛JS #1
    ```cpp
    public:
        void levelOrder(){
            levelOrder(root);
        }
    private:
        void levelOrder(Node* root){
            queue<Node*> q;
            q.push(root);
            while(!q.empty()){
                Node* node = q.front();
                q.pop();
    
                cout<<node->key<<endl;
    
                if(node->left)
                    q.push(node->left);
                if(node->right)
                    q.push(node->right);
            }
        }
    ```
    那老师这样写会不会更好?
    我会继续加油的
    回复 有任何疑惑可以回复我~ 2019-08-13 16:13:13
  • liuyubobobo 回复 提问者 苏丛JS #2
    可以,但其实并不需要。因为我们课程中的 levelOrder 不需要用户传来参数,所以用户调用这个接口是感受不到 Node 的存在的,可以达到屏蔽 Node 的目的:)
    回复 有任何疑惑可以回复我~ 2019-08-14 01:16:55
  • 提问者 苏丛JS 回复 liuyubobobo #3
    我还是想问一下, 那前中后序遍历这样写是不是也没必要
    ```cpp
    public:
        void preOrder(){
            preOrder(root);
        }
    private:
        void postOrder(Node* node){
            if(node != NULL){
                preOrder(node->left);
                preOrder(node->right);
                cout<<node->key<<endl;
            }
        }
    ```
    回复 有任何疑惑可以回复我~ 2019-08-14 08:52:29
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号