美文网首页
小朋友学C++(4):public, protected, pr

小朋友学C++(4):public, protected, pr

作者: 海天一树X | 来源:发表于2018-03-27 12:06 被阅读0次

    面向对象有三大特征:封装、继承、多态。(具体会在之后的课程里讲)

    C++用三个关键词来表示访问范围:public, protected, private。
    public和private作用就是实现封装。类外的代码可以访问public成员而不能访问private成员;private成员只能由类成员访问。
    protected的作用则是实现继承。protected成员可以被派生类(也叫子类)对象访问,不能被用户代码类外的代码访问。

    例1:private修饰属性和方法

    #include <iostream>
    using namespace std;
    
    class Dog
    {   
    private:
        string name;
        
        void run()
        {
            cout << "running..." << endl;
        }
    };
    
    int main()
    {
        Dog dog;
        dog.name = "Wang Cai";
        dog.run();
        
        return 0;
    }
    

    编译程序,报错:


    1.png

    这是因为,name和run()都是私有的,类外的main()没有权限访问dog.name和dog.run()

    例2:将private改为protected

    #include <iostream>
    using namespace std;
    
    class Dog
    {   
    protected:
        String name;
        
        void run()
        {
            cout << "running..." << endl;
        }
    };
    
    int main()
    {
        Dog dog;
        dog.name = "Wang Cai";
        dog.run();
        
        return 0;
    }
    

    编译程序,报错:


    2.png

    报错理由跟上面的差不多,因为name和run()是protected, 外部的main()没有权限访问。

    例3:将protected改为public

    #include <iostream>
    using namespace std;
    
    class Dog
    {   
    public:
        string name;
        
        void run()
        {
            cout << "running..." << endl;
        }
    };
    
    int main()
    {
        Dog dog;
        dog.name = "Wang Cai";
        dog.run();
        
        return 0;
    }
    

    程序正常运行。运行结果:

    running...
    

    有些人可能会想,我不加任何关键字,后果会怎样?
    例4:不加修饰符

    #include <iostream>
    using namespace std;
    
    class Dog
    {   
        string name;
        
        void run()
        {
            cout << "running..." << endl;
        }
    };
    
    int main()
    {
        Dog dog;
        dog.name = "Wang Cai";
        dog.run();
        
        return 0;
    }
    

    编译报错,错误与例1相同:


    4.png

    可见如果不加任何关键字,无论是属性还是方法,默认都是private。

    加入少儿信息学奥赛学习QQ群请扫左侧二维码,关注微信公众号请扫右侧二维码


    QQ群和公众号.png

    相关文章

      网友评论

          本文标题:小朋友学C++(4):public, protected, pr

          本文链接:https://www.haomeiwen.com/subject/irwjcftx.html