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

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容