C++中类的三种访问权限解析:private、public与protect

C++类的三种访问权限:private、public与protect

类与面向对象

C++中可以定义一个类。

定义一个类,其实就是把一堆实体的共同特征给提取出来。这种面向对象而不是面向过程的解决问题的思想,大大提升了复杂大型软件的开发效率。

比如在游戏开发中,需要生成一批属性相近、行为相似的怪物,那我们可以定义一个怪物类:

class Monster {

​    private:         //私有类型成员

​        int attack = 15;    //攻击力属性

​    public:            //公有类型成员
      
          int health = 100;    //生命值属性

​        void strike ( ) { //怪物对玩家进行一次攻击

​        ......
        }    

​        void recover( ) { //怪物回血,并提高自身攻击力

​            if (health <= 95) health += 5;
              attack += 5;
        }  

我们知道,一个类中可以有两种成员在里面:类中成员变量和类中成员函数。成员变量用于描述类的静态属性,如上述的 health 和 attack;成员函数其实就是类的动态行为,比如上述的strike()和recover()。

补充一下:函数,本质上一串能够完成特定行为的代码。

例如其中strike()可以使怪物对玩家造成伤害(改变玩家生命值);recover()可以恢复一定量的生命值并提高攻击力。

如果想要增加游戏难度,则可以增加怪物类中strike()和recover()调用频率,或者提高health和attack的初始值,这些操作在C++中都很容易做到。这种面向对象的编程思想,让一些从面向过程的角度看来十分抽象的行为,都能够用C++比较轻松地实现。

那么,如此便够了么?仅仅用成员变量和成员函数便可以完成许多复杂操作,我们不应该窃喜么?

三种访问权限

private与public

上述代码中的 private 和 public 是怎么回事?他们的存在有什么意思?

  • private代表类内私有成员,仅有类内函数可以访问private,类外一切函数(包括继承者)均不可访问private成员。
  • public代表类内公有成员,无论类内还是类外(包括继承者)的函数都可以访问public成员。

通过这两个关键字,我们实现了对类内成员的访问权限控制。在一些特定情况下,访问权限控制十分方便。比如在上述代码中,我们将怪物的攻击力attack设置为private,这样就只有类内的recover()函数能够访问attack属性;将生命值health设置为public,于是当玩家对怪物进行攻击时,health也能被玩家类player的攻击函数访问而减小。

  • 除此以外,还有另一个关键字protect(即保护成员),主要用在类的继承中。如果有任何变量或函数被声明为protect,那么这些保护成员可以被类的继承者中成员函数访问,而无法被类外任何函数访问。因为这个关键字涉及继承机制,稍微有点复杂,所以我们留到下次。

关于类的访问权限(控制权限)的区别

C++中类的访问权限有三种,分别是public公共权限,protected保护权限,private私有权限。将成员属性和成员方法放到不同的访问权限中加以实际控制。

三种成员控制权限的区别

  • 在公共权限内的成员类内可以访问,类外也可以访问。
  • 在保护权限内的成员类内可以访问,类外不可以访问。
  • 在私有权限内的成员类内可以访问,类外不可以访问。

代码示例

#include <iostream>
using namespace std;
class peo {
public:                //公共权限 类内类外可以访问
    string name;
protected:             //保护权限,类内可以访问,类外不可以访问
    string House;
private:               //私有权限,类内可以访问,类外不可以访问
    string car;
public:
    void lei() {
        name = "老张";
        House = "张家";        //保护权限的类内访问
        car = "长城";          //私有权限的类内访问
    }
};
 
int main() {
    peo p;
    p.name = "小张";                
        //p.house="小张家"; 保护权限类外不可以访问
        //p.car="长城plus"; 私有权限类外不可以访问
 
        return 0;
}

小结一下:通过对不同成员控制权限的了解和使用,在实际项目中可以根据自己的需求选择相应的权限并写上相应的接口对类内成员进行调用。

总结

作者:「已注销」原文地址:https://blog.csdn.net/weixin_51268298/article/details/122569959

%s 个评论

要回复文章请先登录注册