cpp封装访问权限

01-2 封装的意义-访问权限

在学习 01-1 的时候,我们已经了解过封装的意义了:

  • 将属性和行为作为一个整体。
  • 将属性和行为使用权限进行管控。

前者我们已经学习过了,定义一个类,这个类里面有访问权限、属性和行为。其语法是:class 类的名称 {访问权限: 属性 / 行为};

现在,我们学习的是封装的第二个意义:将属性和行为使用权限进行管理。

在设计类的时候,可以把属性和行为放在不同的权限下,加以控制。

访问权限有如下三种:

  1. public:公共权限:类内可以访问,类外可以访问。
  2. protected:保护权限:类内可以访问,类外不可以访问。
  3. private:私有权限:类内可以访问,类外不可以访问。

其中,保护权限(protected)和私有权限(private)都是在类内可以访问,类外不可以访问的。这两个权限的区别主要体现在继承之中。

  • 保护权限(protected:父项数据子项可以访问。
  • 私有权限(private:父项数据子项也不可以访问。
#include <iostream>
#include <string>
using namespace std;
//访问权限:
//1. `public`:公共权限:类内可以访问,类外可以访问。
//2. `protected`:保护权限:类内可以访问,类外不可以访问。 父项数据子项可以访问。
//3. `private`:私有权限:类内可以访问,类外不可以访问。 父项数据子项也不可以访问。
class persion 
{
//公共权限
public:
    string name;
//保护权限
protected:
    int age;
//私有权限
private:
    int password;
public:
    void print()
    {
        cout << "姓名:" << name << endl;
        cout << "年龄:" << age << endl;
        cout << "密码:" << password << endl;
    }
    void set()
    {
        name = "张三";
        age = 14;
        password = 114514;
    }
};
void printp(persion p)
{
    cout << "姓名:" << p.name << endl;
    //cout << "年龄:" << p.age << endl; //保护权限内容,在类外不可以访问
    //cout << "密码:" << p.password << endl; //私有权限内容,在类外不可以访问
    // 函数同理,只要在类外,保护和私有权限就是不可以访问
}
int main()
{
    persion p1;
    p1.set();
    p1.name = "李四";
    //p1.age = 12; //保护权限内容,在类外不可以访问
    //p1.password = 114515; //私有权限内容,在类外不可以访问
    cout << "使用类内的函数试试" << endl;
    p1.print();
    cout << "使用类外的函数试试" << endl;
    printp(p1);
    system("pause");
    return 0;
}

运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

使用类内的函数试试
姓名:李四
年龄:14
密码:114514
使用类外的函数试试
姓名:李四
请按任意键继续. . .

我们创建了一个类:

class persion 
{
public:
    string name;
protected:
    int age;
private:
    int password;
public:
    void print()
    {
        cout << "姓名:" << name << endl;
        cout << "年龄:" << age << endl;
        cout << "密码:" << password << endl;
    }
    void set()
    {
        name = "张三";
        age = 14;
        password = 114514;
    }
};

在这个类里面,name是公共权限;password是保护权限;password是隐私权限。其中行为有两个,setprint。分别用于设置数据值和打印数据值。

int main()
{
  persion p1;
    p1.set();
    p1.name = "李四";
    //p1.age = 12; 
    //p1.password = 114515; 
  return 0;
}

这时候,如果我们在main函数中试图给这三个类内数据赋值,则会发现agepassword无法赋值(会报错)。报错内容如下:

成员 "persion::age" (已声明 所在行数:xx) 不可访问
成员 "persion::password" (已声明 所在行数:xx) 不可访问

这是因为,这两个类内属性已经被设置了保护和私有。所以在类外是不可以访问的。

但是如果我们调用类内的函数print(用于打印数据):

int main()
{
  persion p1;
    p1.set();
    p1.print(); 
  return 0;
}

运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

姓名:张三
年龄:14
密码:114514

因为print函数在类内,类内的函数可以访问类内的数据。如果我们再定义一个函数:

void printp (persion p);
int main()
{
  persion p1;
    p1.set();
  printp(p1);
}
void printp (persion p)
{
    cout << "姓名:" << name << endl;
        //cout << "年龄:" << age << endl;
        //cout << "密码:" << password << endl;
}

则会在我们在类外定义的函数内报错。这是因为这个函数不在类内,同样无法访问类内的数据。(所以上面注释掉了会报错的部分。)

当然,行为也是可以定义权限的。

class persion 
{
public:
    string name;
protected:
    int age;
private:
    int password;
public:
    void print()
    {
        cout << "姓名:" << name << endl;
        cout << "年龄:" << age << endl;
        cout << "密码:" << password << endl;
    }
protected:
  void setage (int newage)
  {
    age = newage
    return;
  }
}
  • 总结public公共权限;protected保护权限;private私有权限。在类内,三者皆可读取。在类外,仅可以读取公共权限。
文章「cpp封装访问权限」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/848」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇