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

 更新时间:2022年11月25日 10:26:15   作者:「已注销」  
这篇文章主要介绍了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;
}

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 数据结构与算法 排序(冒泡,选择,插入)

    数据结构与算法 排序(冒泡,选择,插入)

    这篇文章主要介绍了数据结构与算法 排序(冒泡,选择,插入)的相关资料,这里对冒泡,选择和插入都做有实例,需要的朋友可以参考下
    2017-07-07
  • C++ 获取当前正在运行函数的名称

    C++ 获取当前正在运行函数的名称

    本文主要介绍了C++获取当前正在运行函数的名称,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C/C++实现重置文件时间戳

    C/C++实现重置文件时间戳

    这篇文章主要为大家详细介绍了C/C++实现重置文件时间戳的相关资料,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以参考一下
    2023-11-11
  • C++中的对象指针总结

    C++中的对象指针总结

    以下是对C++中的对象指针进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • OpenCV实战之基于Hu矩实现轮廓匹配

    OpenCV实战之基于Hu矩实现轮廓匹配

    这篇文章主要介绍了利用C++ OpenCV实现基于Hu矩的轮廓匹配,文中的示例代码讲解详细,对我们学习OpenCV有一定的帮助,感兴趣的可以学习一下
    2022-01-01
  • C语言实现绘制立体饼图的示例代码

    C语言实现绘制立体饼图的示例代码

    这篇文章主要为大家详细介绍了如何使用C语言实现绘制立体饼图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • C++高性能服务器框架之线程模块

    C++高性能服务器框架之线程模块

    该模块基于pthread实现,sylar说,由于c++11中的thread也是由pthread封装实现的,并且没有提供读写互斥量,读写锁,自旋锁等,所以自己封装了pthread,本文主要详细介绍了C++高性能服务器框架中的线程模块,需要的朋友可以参考下
    2023-06-06
  • 减小VC6编译生成的exe文件的大小的方法

    减小VC6编译生成的exe文件的大小的方法

    这篇文章主要介绍了减小VC6编译生成的exe文件的大小的方法,需要的朋友可以参考下
    2015-01-01
  • Qt中parent()函数的具体使用

    Qt中parent()函数的具体使用

    你会发现几乎所有的Qt类的构造函数都会有一个parent参数,本文主要介绍了Qt中parent()函数的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • C语言实现学籍管理系统课程设计

    C语言实现学籍管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现学籍管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论