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

目录
  • 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;
}

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

总结

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

(0)

相关推荐

  • C++继承类成员访问权限修饰符详解

    目录 1. 前言 2. 不同修饰下的类成员被访问权限 3. 继承时的属性变化 4. protected的作用 总结 1. 前言 C++提供了三个修饰符来限定类成员的被访问权限,分别是public ,protected, private. 通过限定访问权限,可以达到程序编写者想要解决的安全问题和权限问题.这种权限的设置对于安全是非常必要的. 2. 不同修饰下的类成员被访问权限 public:被public修饰的类成员可以在任何地方被访问到. protected:被protected修饰的类成员可以

  • C++中的三种继承public,protected,private详细解析

    三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protect 继承 private 继承 组合结果 基类中 继承方式 子类中 public & public继承 => public public & protected继承 => protected public & private继承 = > private protected &am

  • C++ 的三种访问权限与三种继承方式

    三种访问权限 我们知道C++中的类,有三种访问权限(也称作访问控制),它们分别是public.protected.private.要理解它们其实也很容易,看下面了一个例子. 父类: class Person { public: Person(const string& name, int age) : m_name(name), m_age(age) { } void ShowInfo() { cout << "姓名:" << m_name <&l

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

    目录 C++类的三种访问权限:private.public与protect 类与面向对象 三种访问权限 关于类的访问权限(控制权限)的区别 三种成员控制权限的区别 总结 C++类的三种访问权限:private.public与protect 类与面向对象 C++中可以定义一个类. 定义一个类,其实就是把一堆实体的共同特征给提取出来.这种面向对象而不是面向过程的解决问题的思想,大大提升了复杂大型软件的开发效率. 比如在游戏开发中,需要生成一批属性相近.行为相似的怪物,那我们可以定义一个怪物类: cl

  • Java中四种访问权限资料整理

     Java中四种访问权限总结 一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访问权限限制的最窄的修饰符,一般称之为"私有的".被其修饰的属性以及方法只能被该类的对象 访问,其子类不能访问,更不能允许跨包访问. 2. default:即不加任何访问修饰符,通常称为"默认访问权限"或者"包访问权限".

  • java四种访问权限实例分析

    引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: 指的是本类及本类内部的成员(成员变量.成员方法.内部类)对其他类的可见性,即这些内容是否允许其他类访问. Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public > protected > default(包访问权限) > private ,具体的权限控制看下面表格,列所

  • 对python For 循环的三种遍历方式解析

    实例如下所示: array = ["a","b","c"] for item in array: print(item) for index in range(len(array)): print(str(index)+".."+array[index]) for index,val in enumerate(array): print(str(index)+"--"+val); 打印结果 a b c 0.

  • java类访问权限与成员访问权限解析

    在写代码的时候有个问题:包内定义了一个接口类,另外一个包要实现它,这里采用接口隔离与依赖倒置原则,将两个包的依赖关系倒置过来.但是,这里就遇到了一个问题,实现类采用工厂模式来实例化,所以实现类就不想暴露给包外,但是实现类还要实现public接口.所以这里有产生了一个疑问,如果类是default类型,成员函数是public类型,那么访问限制是怎样的呢? 实现验证 1. 先在一个包中定义一个接口类: package mytest public interface ClassAccessTest {

  • SpringBoot操作Redis三种方案全解析

    使用 Java 操作 Redis 的方案很多,Jedis 是目前较为流行的一种方案,除了 Jedis ,还有很多其他解决方案,如下: 除了这些方案之外,还有一个使用也相当多的方案,就是 Spring Data Redis. 在传统的 SSM 中,需要开发者自己来配置 Spring Data Redis ,这个配置比较繁琐,主要配置 3 个东西:连接池.连接器信息以及 key 和 value 的序列化方案. 在 Spring Boot 中,默认集成的 Redis 就是 Spring Data Re

  • JS图片预加载三种实现方法解析

    预加载基本概念:当页面打开图片提前加载,并且缓存在用户本地,需要用到时直接进行渲染:在浏览图片较多的网页(百度图库,淘宝京东等),可以有更好的用户体验: 一张图片的预加载 var img=new Image(); img.addEventListener("load",loadHandler); img.src="./img/1.jpg"; document.body.appendChild(img); console.log(img.width): functio

  • c++中new的三种用法详细解析

    一. 简介new有三种使用方式:plain new,nothrow new和placement new. (1)plain new顾名思义就是普通的new,就是我们惯常使用的new.在C++中是这样定义的:    void* operator new(std::size_t) throw(std::bad_alloc);    void operator delete(void *) throw(); 提示:plain new在分配失败的情况下,抛出异常std::bad_alloc而不是返回NU

随机推荐