前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小朋友学C++(4):public, protected, private

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

作者头像
海天一树
发布2018-04-17 12:09:02
4810
发布2018-04-17 12:09:02
举报
文章被收录于专栏:海天一树海天一树

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

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

例1:private修饰属性和方法

代码语言:javascript
复制
#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;
}

编译程序,报错:

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

例2:将private改为protected

代码语言:javascript
复制
#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;
}

编译程序,报错:

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

例3:将protected改为public

代码语言:javascript
复制
#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;
}

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

代码语言:javascript
复制
running...

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

代码语言:javascript
复制
#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相同:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天一树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档