美文网首页
小朋友学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