C++ 访问修饰符 private、protected、public

C++ 访问修饰符 privateprotected,和public

flyfish

2009-01-19
2024-07-23 做成表格形式,可以直接拖到下面,看表格形式更清楚。

访问修饰符(Access Modifiers)是C++中用于控制类和结构体成员(包括变量和函数)访问权限的关键字。通过使用访问修饰符,程序员可以规定哪些成员可以在类的外部被访问,哪些成员只能在类的内部或其派生类中被访问。C++中有三种主要的访问修饰符:

  1. private :私有成员只能在类的内部访问,不能被类外的代码直接访问。这种访问权限用于隐藏类的实现细节,保护类的内部状态不被外部代码直接修改。

  2. protected :受保护成员在类的内部和派生类中可以访问,但不能被类外的代码直接访问。这种访问权限通常用于继承机制,允许派生类访问基类的某些成员。

  3. public :公有成员可以在任何地方访问,不受任何限制。这种访问权限用于定义类的公共接口,外部代码可以通过这些成员与类进行交互。

访问修饰符示例
#include <iostream>class Example {
private:int privateVar;  // 私有成员protected:int protectedVar;  // 受保护成员public:int publicVar;  // 公有成员Example() : privateVar(1), protectedVar(2), publicVar(3) {}void display() {std::cout << "PrivateVar: " << privateVar << std::endl;std::cout << "ProtectedVar: " << protectedVar << std::endl;std::cout << "PublicVar: " << publicVar << std::endl;}
};int main() {Example example;example.display();// example.privateVar;  // 错误,无法访问私有成员// example.protectedVar;  // 错误,无法访问受保护成员std::cout << "PublicVar: " << example.publicVar << std::endl;  // 可以访问公有成员return 0;
}

在上面的示例中:
privateVar 是私有成员,只能在类的内部访问。
protectedVar 是受保护成员,可以在类的内部和派生类中访问。
publicVar 是公有成员,可以在任何地方访问。

公有继承示例
#include <iostream>class Base {
public:int publicVar;
protected:int protectedVar;
private:int privateVar;
};class PublicDerived : public Base {
public:void display() {std::cout << "PublicVar: " << publicVar << std::endl;std::cout << "ProtectedVar: " << protectedVar << std::endl;// std::cout << "PrivateVar: " << privateVar << std::endl;  // 错误,无法访问私有成员}
};int main() {PublicDerived derived;derived.display();std::cout << "PublicVar: " << derived.publicVar << std::endl;  // 可以访问公有成员// std::cout << "ProtectedVar: " << derived.protectedVar << std::endl;  // 错误,无法访问受保护成员return 0;
}

在这个示例中,PublicDerived类继承了Base类:
publicVar 作为公有成员在派生类中仍然是公有的,可以直接访问。
protectedVar 作为受保护成员在派生类中仍然是受保护的,可以在派生类内部访问。
privateVar 作为私有成员在派生类中不可访问。

友元类示例
#include <iostream>class MyClass {
private:int privateVar;public:MyClass() : privateVar(10) {}// 声明FriendClass是MyClass的友元类friend class FriendClass;
};class FriendClass {
public:void accessPrivateVar(MyClass &obj) {std::cout << "Accessing privateVar: " << obj.privateVar << std::endl;obj.privateVar = 20;std::cout << "Modified privateVar: " << obj.privateVar << std::endl;}
};int main() {MyClass obj;FriendClass friendObj;friendObj.accessPrivateVar(obj);return 0;
}

在这个示例中,FriendClass被声明为MyClass的友元类,因此它可以访问MyClass的私有成员privateVar。友元类的主要目的是允许特定的类访问另一个类的私有和受保护成员,通常用于需要紧密合作的类之间。

C++ 访问修饰符总结

访问修饰符类内部访问派生类访问类外部访问
private
protected
public

继承类型对访问权限的影响

公有继承(public inheritance)

基类成员在派生类中的访问级别
publicpublic
protectedprotected
private不可访问

受保护继承(protected inheritance)

基类成员在派生类中的访问级别
publicprotected
protectedprotected
private不可访问

私有继承(private inheritance)

基类成员在派生类中的访问级别
publicprivate
protectedprivate
private不可访问

友元类(Friend Classes)

友元类可以访问另一个类的私有和受保护成员。友元关系不是双向的,也不是传递的。

class MyClass {
private:int privateVar;// 声明FriendClass是MyClass的友元类friend class FriendClass;
};class FriendClass {
public:void accessPrivateVar(MyClass &obj) {obj.privateVar = 10; // 可以访问MyClass的私有成员}
};

在上面的例子中,FriendClass被声明为MyClass的友元类,因此它可以访问MyClass的私有成员privateVar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙OpenHarmony Native API【drawing_path.h】 头文件

drawing_path.h Overview Related Modules: [Drawing] Description: 文件中定义了与自定义路径相关的功能函数 Since: 8 Version: 1.0 Summary Functions FunctionDescription[OH_Drawing_PathCreate] (void)[OH_Drawing_Path] * 函数用于创建一个路径对象OH_Drawin…

蜂窝物联云平台:一站式服务,智能生活从此开始!

蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块&#xff0c;轻松点选查看详细设备信息、实时监控和控制功能&#xff0c;以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制&#xff0c;打造独一无二的用户体验。 数据集中看板 将…

以进程完成并发的UDP服务端

网络(八)并发的UDP服务端 以进程完成功能 多进程处理 UDP客户端 // todo UDP发送端 #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <stdlib.h> #includ…

【Python机器学习】k-近邻算法简单实践——改进约会网站的配对效果

需求背景&#xff1a; XX一直使用约会网站寻找适合自己的约会对象&#xff0c;ta会把人分为3种类型&#xff1a; 不喜欢、魅力一般、非常有魅力 对人分类轴&#xff0c;发现了对象样本的以下3种特征&#xff1a; 1、每年获得的飞行里程数 2、玩视频游戏所耗时间百分比 3、…

linux操作系统之线程

1.线程概念 线程是一个轻量级进程,每一个线程都属于一个进程 进程是操作系统资源分配的最小单位,而线程是CPU任务调度的最小单位 线程是一个任务执行的过程,包括创建,调度,消亡 创建:线程空间位于进程空间,进程中的线程,栈区独立,并共享进程中的数据区,文本区,堆区 调度:宏观…

常见的JS混淆及处理办法

1&#xff0c;变量名混淆 文本增添属性的过程中有很多操作空间 原始代码&#xff1a; s[age,job] function xx(){};xx.prototype[s[0]]15 xx.prototype[s[1]]teacheranew xx() 将属性名经过base64加密&#xff0c;并对函数名xx,&#xff0c;数组名s&#xff0c;经过混淆处理…

【C++】C++如何使用结构体中的枚举类型

目录 示例1&#xff1a;在结构体中定义枚举 示例2&#xff1a;使用枚举作为结构体成员的类型 示例3&#xff1a;在结构体方法中使用枚举 注意事项 在C中&#xff0c;可以在结构体&#xff08; struct &#xff09;中定义枚举类型&#xff0c;并使用这些枚举值作为结构体成员…

【网络安全的神秘世界】 文件上传及验证绕过

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 这个漏洞对于初学者好挖&#xff0c;先找到文件上传的位置 文件上传是web网页中常见的功能之一&#xff0c;通常情况下恶意文…

C# 进制之间的转换(二进制,八进制,十进制,十六进制)

常用的方法是&#xff1a;Convert.ToString(byte value, int toBase)&#xff0c; 并且有多个重载方法&#xff0c; value的类型可以为short&#xff0c;int 等&#xff0c;但必须是整数且不能为负数&#xff0c; 一般默认为十进制 toBase: 返回值的基数&#xff0c;必须是 2、…

以太坊的可扩展性危机:探索执行层的瓶颈

导读&#xff1a;以太坊执行层承担着交易处理、智能合约执行以及保持一致和安全状态的维护等工作。Fuel Labs 撰文解析了以太坊执行层的工作原理&#xff0c;及其在可扩展性方面的发展瓶颈和影响。 Fuel Labs: 执行是指在区块链上执行交易和执行状态更改所需的计算。此计算通常…

【数据结构初阶】一篇文章带你超深度理解【单链表】

hi &#xff01; 目录 前言&#xff1a; 1、链表的概念和结构 2、单链表&#xff08;Single List&#xff0c;简写SList&#xff09;的实现 2.1 定义链表&#xff08;结点&#xff09;的结构 2.2 创建一个链表 2.3 打印链表 2.4 尾插 2.5 头插 2.6 尾删 2.7 头…

python中argparse模块及action=‘store_true‘详解

1. 指定action时 通俗讲&#xff0c;action的作用就是在命令行中指定参数名称时&#xff0c;参数的取值。 如&#xff1a; parser.add_argument(--save-file, actionstore_true, defaultFalse, help是否保存文件) 给参数设置action之后&#xff0c;命令执行时&#xff0c;…

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

C基础(学习)2024.7.24

Linux基本命令&#xff0c;vi编译器的使用&#xff0c;简单的编程步骤&#xff0c;程序语言&#xff0c;gcc编译器编译过程&#xff0c;进制转换相关知识可以查看文档http://t.csdnimg.cn/CmqhC 数值表示&#xff0c;词法符号&#xff0c;变量&#xff0c;常量相关知识可以查看…

数据结构初阶(C语言)-二叉树

一&#xff0c;树的概念与结构 树是⼀种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 1.有⼀个特殊的结点&a…

【Linux学习 | 第1篇】Linux介绍+安装

文章目录 Linux1. Linux简介1.1 不同操作系统1.2 Linux系统版本 2. Linux安装2.1 安装方式2.2 网卡设置2.3 安装SSH连接工具2.4 Linux和Windows目录结构对比 Linux 1. Linux简介 1.1 不同操作系统 桌面操作系统 Windows (用户数量最多)MacOS ( 操作体验好&#xff0c;办公人…

昇思25天学习打卡营第22天|基于MindNLP+MusicGen生成自己的个性化音乐

文章目录 昇思MindSpore应用实践1、MusicGen模型简介残差矢量量化&#xff08;RVQ&#xff09;SoundStreamEncodec 2、生成音乐无提示生成文本提示生成音频提示生成 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 1、MusicGen模型简…

python使用 tkinter 生成随机颜色

先看效果: 只要不停点击底部的按钮&#xff0c;每次都会生成新的颜色。炫酷啊。 import random import tkinter import tkinter.messagebox from tkinter import Button# todo """ 1. 设置一个按钮&#xff0c;来让用户选择是否显示颜色值 2. 把按钮换成 Label…

谷粒商城实战笔记-错误记录-启动失败

文章目录 一&#xff0c;lombok报错二&#xff0c;Output directory is not specified 一&#xff0c;lombok报错 java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok …

MATLAB的基础知识

matlab的基本小常识 1. 在每行语句后面加上英文分号表示不在命令行窗口显示运行结果。 a 3; a 5 2. 多行注释快捷键&#xff0c;CTRLR。 3. 取消多行注释&#xff0c;CTRLT。 4. 清空工作区的所有变量使用clear。 5. 清空命令行窗口的所有变量使用clc。 6. clc和clear一起使…