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;
}

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

总结

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

相关文章

  • C语言深入浅出讲解顺序表的实现

    C语言深入浅出讲解顺序表的实现

    线性表是最简单的数据结构,而顺序表又是最简单的线性表,其基本思想是用一段地址连续的储存单元依次存储线性表的数据元素,比如我们常用的一维数组,下面代码实现了顺序表的定义以及基本操作
    2022-04-04
  • 浅析c与c++中struct的区别

    浅析c与c++中struct的区别

    c与c++中struct的区别你是否了解,下面小编就详细的为大家介绍一下
    2013-07-07
  • opencv检测直线方法之形态学方法

    opencv检测直线方法之形态学方法

    这篇文章主要为大家详细介绍了opencv检测直线方法之形态学方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Qt中QPainter与坐标的使用

    Qt中QPainter与坐标的使用

    本文主要介绍了Qt中QPainter与坐标的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C语言从零探索函数的知识

    C语言从零探索函数的知识

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数,让我们一起来了解它
    2022-04-04
  • C语言数据结构与算法之时间空间复杂度入门

    C语言数据结构与算法之时间空间复杂度入门

    这篇文章主要为大家介绍了C语言数据结构与算法之时间空间复杂度的入门教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • c语言中用位运算实现加法技巧介绍

    c语言中用位运算实现加法技巧介绍

    用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,需要的朋友可以参考下
    2012-11-11
  • C++中priority_queue与仿函数实现方法

    C++中priority_queue与仿函数实现方法

    这篇文章主要给大家介绍了关于C++中priority_queue与仿函数实现的相关资料,优先级队列是一种容器适配器,其底层通常采用vector容器,并通过堆算法来维护元素的顺序,文中通过代码介绍的非常详细《》需要的朋友可以参考下
    2024-10-10
  • 浅析C++中的重载,隐藏和覆盖

    浅析C++中的重载,隐藏和覆盖

    在C++语言中,函数扮演着很重要的角色,不管面向过程设计,还是基于对象设计。本文主要为大家介绍了函数中重载、覆盖和隐藏的相关知识,感兴趣的小伙伴可以了解一下
    2022-12-12
  • C++超详细分析优化排序算法之堆排序

    C++超详细分析优化排序算法之堆排序

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将通过图片详细介绍堆排序,需要的可以参考一下
    2023-02-02

最新评论