当前位置: 首页 > news >正文

C++ 访问限定符

个人主页:Jason_from_China-CSDN博客

所属栏目:C++系统性学习_Jason_from_China的博客-CSDN博客

所属栏目:C++知识点的补充_Jason_from_China的博客-CSDN博客

概念概述

  • C++一种实现封装的方式,用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
  • public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private是一样的,以后继承章节才能体现出他们的区别。 
  • 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止,如果没有后面没有访问限定符,作用域就到 }即类结束。 
  • class定义成员没有被访问限定符修饰时默认为private,struct默认为public。 
  • 一般成员变量都会被限制为private/protected,需要给别人使用的成员函数会放为public。

访问限定符的符号

在C++中,访问限定符用于控制类成员的访问权限。主要有三种访问限定符:

  1. public:公开的,可以被任何外部代码访问。
  2. protected:受保护的,可以被类本身以及其派生类访问。
  3. private:私有的,只能被类本身访问。

访问限定符的使用public(公有的):

默认情况下,如果不指定访问限定符,成员就是公开的。公开成员可以在类的任何对象上被访问,也可以在派生类中被访问(除非被隐藏)。

class MyClass {
public:int publicVar; // 公开成员,可以被任何外部代码访问void publicFunc() { /* ... */ } // 公开成员函数
};

这里我们可以看见,类外面是可以访问私有变量的

访问限定符的使用private(私有变量):

私有成员只能被类本身访问。它们不能被外部代码访问,也不能被派生类访问。

class MyClass {
private:int privateVar; // 私有成员,只能被类本身访问void privateFunc() { /* ... */ }
public:void publicFunc() {privateVar = 20; // 正确,类本身可以访问私有成员privateFunc(); // 正确}
};

在这里我们可以看到,如果放到私有变量里面,我们可以看到类比外面是无法访问类里面的私有变量的。

访问限定符的使用protected:

  1. 类内部访问:类本身可以访问其 protected 成员。
  2. 派生类访问:从该类派生出的子类也可以访问基类的 protected 成员。
  3. 外部访问限制:类外部的代码(即不是类本身也不是派生类)不能直接访问 protected 成员。
//基类
class BaseClass 
{
protected:int protectedVar; // 受保护成员,只能被类本身和派生类访问void protectedFunc() { /* ... */ }
};// 这里是派生类,protected修饰的可以在派生类里面访问
class DerivedClass : public BaseClass 
{
public:void accessProtectedMembers() {protectedVar = 10; // 正确,派生类可以访问基类的受保护成员protectedFunc(); // 正确}
};

通过使用派生类,你可以创建更加灵活和可重用的代码,同时保持代码的组织性和清晰性。

需要注意的小点:

struct

struct MyStruct
{//公有成员变量void Func(){cout << "struct 公有成员变量 " << endl;}
public://公有成员变量private://私有变量};

class

class Date
{//私有成员函数变量void Func();
public://公有//构造函数(全缺省构造函数)Date(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}private://私有成员函数变量int _year;int _month;int _day;
};


http://www.mrgr.cn/news/27824.html

相关文章:

  • 【FPGA开发】AXI-Stream总线协议解读
  • redis7.x源码分析:(2) adlist双向链表
  • myscl在 Ubuntu 中使用
  • el-input 正则表达式校验输入框不能输入汉字
  • 关于 MSVCP110.dll 缺失的解决方案
  • 去地面算法——depth_clustering算法调试(1)
  • 中小型企业网络构建
  • PointNet2(一)分类
  • 类和对象(1)
  • [项目][WebServer][Task]详细讲解
  • 从汇编语言到高级语言:人类计算机科学的伟大探索
  • 网络原理 IP协议与以太网协议
  • 2024ICPC网络赛第一场
  • 蒸!--数据在内存中的存储
  • 408算法题leetcode--第五天
  • Cubieboard2(五) 安装无线网卡驱动
  • 软考中级网络工程师——第十二章
  • asio中的handler
  • 基于ssm+vue+uniapp的智能停车场管理系统小程序
  • 【数据结构与算法 | 每日一题 | 力扣篇】力扣1184
  • 滚雪球学SpringCloud[3.3讲]:Resilience4j:现代化的容错处理详解
  • Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)
  • Redis基础数据结构之 quicklist 和 listpack 源码解读
  • 请求响应-05.请求-日期参数JSON参数
  • 3286、穿越网格图的安全路径
  • node express 开启多进程