QT第15节课程笔记 -C++权限初识

win32下Qt5BLE蓝牙开发笔记 BLE简介 BLE蓝牙是蓝牙2.0以上的蓝牙模块,经典蓝牙是蓝牙2.0以下的蓝牙。蓝牙分为客户端和服务器两端,经典蓝牙可以通过socket编程进行客户端与服务器之间的通信(与网络socket相似),BLE蓝牙则无法使用这种方式进行通信。BLE蓝牙下有服务、特征值,所谓的BLE蓝牙通信其实就是对特征值的一个读写操作。微软的Windows下的API关于BLE蓝牙的C++API相对较少,C#的API会相对较多一点。我实现这个蓝牙的demo则是使用了Qt进行一个开发。 需要注意的是Qt中开发所用到的QBlueToo 阅读详情

2.4 权限初识

2.4.1 基本介绍

C++中的访问权限主要分为三种:public、private和protected。这些权限决定了类成员(包括数据成员和成员函数)的可访问性。以下是一个总结表格,说明了在不同情况下这些权限如何应用:

访问权限类内部同一个类的对象派生类(子类)类外部
public✔️ 可访问✔️ 可访问✔️ 可访问✔️ 可访问
private✔️ 可访问❌ 不可访问❌ 不可访问❌ 不可访问
protected✔️ 可访问❌ 不可访问✔️ 可访问❌ 不可访问

使用权限(如 public、private 和 protected)在C++中是一种关键的封装手段,它们旨在控制对类成员的访问。下面是一个表格,总结了使用权限的主要好处和潜在缺点:

好处 / 缺点描述
好处
封装性通过隐藏类的内部实现(私有和受保护成员),提高了代码的安全性和健壮性。
接口与实现的分离公开接口(公开成员)与私有实现分离,有助于用户仅关注于如何使用类而不是如何实现。
易于维护修改类的内部实现不会影响使用该类的代码,从而降低了维护成本。
控制读写访问通过设置访问权限,可以精确控制类成员的读写访问。
继承的灵活性protected 成员在派生类中是可访问的,使得继承更加灵活。
缺点
增加复杂性过度使用或不当使用权限可能导致代码结构复杂,难以理解。
测试难度私有成员的测试比公共成员更困难,因为它们不能从类的外部访问。
灵活性降低过于严格的封装可能限制了某些有效的用法,降低了灵活性。
可能导致紧耦合过多依赖 friend 类或函数可能导致类之间的耦合过紧。

2.4.2 目前能概况的结论

  • public 权限相当于我们学习C语言结构体一样,不考虑访问权限的存在,但是要注意,类中不写权限,默认是私有权限
  • protected 留到继承讲解的时候再提
  • private 私有权限,通过一下案例向各位表达一下作用的意思,但需要未来实战中慢慢体会。

这个例子将阐述在类设计中使用private成员的必要性。我们将创建一个简单的BankAccount类,展示如何使用private来保护账户的余额,确保它只能通过指定的方法进行修改。

所以,我们可以脑部一个场景:

银行的账户是一个模板,是一个类,有存款人信息和账户额度,而具体的存款人视为一个对象,

一个对象不能私自修改账户额度,需要通过一个操作流程,比如去ATM或者柜台进行操作才能修改到账户额度,

所以,存款人信息和账户额度设计成私有权限,通过公有的操作流程,也就是公有函数去操作私有变量。

基于这个场景,我们编程实现代码

#include <iostream>
#include <string>

using namespace std;

/*
银行的账户是一个模板,是一个类,有存款人信息和账户额度,而具体的存款人视为一个对象,
一个对象不能私自修改账户额度,需要通过一个操作流程,比如去ATM或者柜台进行操作才能修改到账户额度,
所以,存款人信息和账户额度设计成私有权限,通过公有的操作流程,也就是公有函数去操作私有变量。
基于这个场景,我们编程实现代码
*/

class BankAccount{
private:
    //有存款人信息和账户额度
    string name;
    string addr;
    int age;
    double balance;
public:
    string bankAddr;
    //比如去ATM或者柜台进行操作才能修改到账户额度
    void registerMes(string newName, string newAddr,int newAge,double newBalance);
    void withdraw(double amount);
    void deposit(double amount);
    double getBalance();
    void printUserInfo();
};
void BankAccount::printUserInfo()
{
    string mesTem = "账户名:" + name + ",地址:" + addr +
            ",年龄:"+ std::to_string(age) + ",存款:" + std::to_string(balance);
    cout << mesTem << endl;
}

void BankAccount::registerMes(string newName, string newAddr,int newAge,double newBalance)
{
    name = newName;
    addr = newAddr;
    age  = newAge;
    balance = newBalance;
}

// 存款方法
void BankAccount::deposit(double amount) {
    if (amount > 0) {
        balance += amount;
    } else {
        cerr << "Deposit amount must be positive." << endl;
    }
}
// 取款方法
void BankAccount::withdraw(double amount) {
    if (amount > balance) {
        cerr << "Insufficient funds." << endl;
    } else if (amount <= 0) {
        cerr << "Withdrawal amount must be positive." << endl;
    } else {
        balance -= amount;
    }
}

// 获取当前余额的方法
double BankAccount::getBalance() {
    return balance;
}

int main()
{
    BankAccount user1;
    user1.registerMes("老陈","深圳光明区",35,100);
    user1.printUserInfo();
    user1.deposit(1000);
    cout << user1.getBalance() << endl;
    user1.withdraw(30);
    cout << user1.getBalance() << endl;
    return 0;
}

在这个示例中,balance 是一个private成员变量,它不能被类的外部直接访问。这保证了账户余额只能通过类提供的方法(如 deposit, withdraw, 和 getBalance)来修改和查询,从而防止了不合适的修改,比如直接设置余额为负数或任意值。这样的设计保证了类的封装性和数据的完整性。

2.4.3 提问和回答

问:为什么新手学习C++感受不到访问权限的必要性呢

答:新手学习C++时可能不会立即感受到访问权限(如public、private、protected)的必要性,主要有以下几个原因:

  1. 简单的例子和练习:初学者通常从简单的例子和练习开始,这些例子可能不需要复杂的封装或继承结构。在这种情况下,访问权限的作用可能不太明显。
  2. 封装的概念需要时间去理解:封装是面向对象编程中的一个核心概念,但对于初学者来说,理解封装的价值需要一定的时间和实践。在初期,更多的关注点可能放在基本语法和程序结构上。
  3. 缺乏大型项目经验:在小型项目或单文件程序中,访问权限的重要性可能不如在大型、多人协作的项目中那么显著。在复杂的软件开发中,适当的访问控制对于代码的维护性和可读性至关重要。
  4. 直接操作感觉更简单:对于初学者来说,直接访问和修改类的所有成员可能看起来更简单直接。他们可能还没有遇到由于不恰当访问控制导致的维护和调试问题。
  5. 抽象和设计模式的理解:理解何时以及如何使用访问权限通常涉及到对软件设计模式和抽象的深入理解。这些通常是随着经验积累和更深入的学习而逐渐掌握的。

随着经验的增长,学习者开始处理更复杂的项目,他们将开始意识到恰当的访问控制的重要性,特别是在保持代码的可维护性、可读性以及在团队环境中的协作方面。因此,对于教育者和学习者来说,强调并实践这些概念是很重要的,以便在编程技能成熟时能够有效地运用它们。

告别Qt Creator,手把手教你用VS2019配置Qt5.15.2开发环境(保姆级图文) 本文详细介绍了如何在VS2019中配置Qt5.15.2开发环境,提供从环境准备、组件安装到插件配置的完整指南。通过Qt VS Tools插件实现VS2019与Qt5.15.2的无缝集成,提升C++跨平台开发效率,特别适合习惯Visual Studio生态的开发者。 阅读详情

相关推荐

Qt C++:跨平台开发利器

摘要: Qt C++是基于C++的跨平台开发框架,通过元对象系统、信号槽机制及模块化架构实现"一次编写,多端部署"。核心特性包括: 跨平台能力:覆盖桌面(Windows/macOS/Linux)、移动端(iOS/Android)、嵌入式及WebAssembly; 信号与槽:替代传统回调,实现对象间高效通信; UI组件库:200+预制组件支持QSS样式定制; 工具链:Qt Creator集成开发环境提供可视化设计、调试及多平台编译。 广泛应用于工业控制、车载系统、医疗设备及跨平台应用开发,

2202_75382767的博客 1683

protected理解

protected关键字虽然子类可以调用,但是仅限于子类的成员函数可以调用基类protected修饰的成员函数或者成员变量,但是子类对象不能直接调用基类protected修饰的成员函数和成员变量。首先先把问题讲清楚。由此可见,自己在这里对protected关键字理解是错误的,protected在记忆中的只是理解为子类可调用,但是平时使用的比较少,至于如何调用则没有深究过,才会造成这样的错误。private继承的则基类中的public和protected修饰的成员变量或者成员函数都将变为private类型。

漫步者 804

从MFC/C#转QT 5.15.2踩坑记:控件重命名的正确姿势与一个隐藏的‘编译后’权限开关

本文详细解析了从MFC/C#转向QT 5.15.2开发时控件重命名的正确方法,重点介绍了QT中objectName属性的使用技巧与编译后权限开关的隐藏机制。通过对比MFC/C#与QT的设计哲学差异,提供了一套完整的控件重命名流程和常见问题解决方案,帮助开发者快速适应QT开发环境。

weixin_30555125的博客 502

Qt_介绍创建

Qt 1、什么是Qt ​ 图形用户界面应用程序开发框架、是对底层的应用程序编程接口进行面向对象的封装,是一套基于C++语言的类库。 ​ 专注但不局限于用户界面开发,也可以进行系统调用,网络通信,数据库,2D/3D 建模,图像处理,音视频处理。 ​ 特点:跨平台,支持linux,Windows,MacOS,IOS,Android系统 2、为什么选择Qt ​ 基于C++语言简单应用,优良的跨平台特性,现阶段在个人计算机,工控,嵌入式的界面占据主导地位。 3、环境与工具 ​ 工具: ​ Qt

Amo-wintercs的博客 455

Qt C++ 老年大学在线课程平台

"已选课" : "选课""" : currentText。- **核心组件**:`Qt WebEngineView` 用于嵌入网页视频播放器(支持 YouTube、B站等在线视频,或本地视频)。UNIQUE KEY `user_course_unique` (`user_id`, `course_id`)-- 防止重复选课。model: ["全部", "书法", "绘画", "舞蹈", "智能手机", "养生"]- 新建用户表 `user`、课程表 `course`、选课记录表 `enrollment`。

寒寒豆豆软件公司的博客 54

QT教学视频下载链接百度网盘.txt

Qt教学视频资源,很完整,值得初学者学习。

C++ Qt 访问权限总结

  总结:C++的访问修饰符的作用是以类为单位,而不是以对象为单位。 通俗的讲,同类的对象间可以“互相访问”对方的数据成员,只不过访问途径不是直接访问. 步骤是:通过一个对象调用其public成员函数,此成员函数可以访问到自己的或者同类其他对象的public/private/protected数据成员和成员函数(类的所有对象共用),而且还需要指明是哪个对象的数据成员(调用函数的对象自己的...

qimo601的专栏 444

MATLAB机械臂轨迹规划:在关节空间中生成多项式轨迹以及 jtraj函数(内容超详细讲解)

matlab机器人仿真,关节空间多项式轨迹生成

qq_40969179的博客 1万+

QT学习笔记3

派生类的成员也只能访问基类中的 oublic/protected 成员,而不能访问 private 成员;派生类的对象不能访问基类中的任何的成员。派生类的成员只能访问基类中的 oublic/protected 成员,而不能访问 private.成员;1. C++中的类是一种构造类型,与 C 语言的结构体相似,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数;在同一个作用域内,声明几个功能类似以的同名函数,并且这些同名函数的参数个数、参数类型或者参数顺序不同,或者函数返回类型不同,那么就叫函数重载。

m0_59949484的博客 537

从勒索软件攻击到数据重生:SQL Server MDF文件修复的实战生存指南

本文详细介绍了SQL Server MDF文件在遭遇勒索软件攻击后的修复策略,重点解析了Recovery Toolbox工具链的应用流程。从灾难评估到数据验证,提供分阶段修复操作、高级修复技术及防御加固方案,帮助企业快速恢复数据库并提升安全防护能力。

weixin_28327051的博客 715

DNS入侵检测 datacon2020

DNS入侵检测 datacon2020。

weixin_51491521的博客 523

Qt基础 | QT5.15.2与VS2019安装及配置

Qt5.15.2与VS2019的安装与配置

zwcslj的博客 1万+

ABAP CDS SELECT, parameters 全面解析:把参数化视图玩明白(含可运行示例)

这篇技术博客介绍了ABAP CDS中参数化视图的用法与实践。文章从业务需求出发,解释了参数化视图的必要性,并详细说明了语法规则、参数类型匹配、视图内部参数引用等关键点。重点展示了在JOIN和ASSOCIATION中传递参数的写法,提供了航线分析的完整业务案例和可运行代码示例。文章还总结了视图实体与DDIC视图的差异、会话变量使用技巧等实践要点,特别强调了JOIN中必须显式传参的语法要求。通过真实场景演示,帮助开发者掌握参数化CDS的高效应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 364

GZHU软件方向综合课程设计——课程管理系统(Qt+mysql)

文章目录前言一、课程设计题目及内容1.基本事实2.时间3.用户二、实验环境(技术选型)1、语言:C++2、开发框架:Qt5.9 (64bit)3、开发环境:Qt Creator 4.3.04、编译器:MSVC 2017 64bit5、数据库:mysql5.7三、需求分析设计1、基本数据表2、系统基本设计3、E-R图四、业务需求考虑1.学生选专业选修课2.排课需求3.排课算法4.学生个人课表查询5.班级课表查询6.教师个人课表查询7.教师查询选课学生表8.教师登分9.学生绩点排名五、系统功能与逻辑设计1、教师

浅若清风cyf的博客 4175

7、初级视觉皮层(V1)的研究综述

本文综述了初级视觉皮层(V1)的基本功能特性、计算理解、细胞相互作用及理论模型。V1不仅执行方向和空间频率的选择性滤波,还通过相位选择性和上下文调制参与高级视觉处理。研究从信息编码角度解释了V1感受野的形成,并介绍了基于自然图像统计的建模方法。横向与反馈连接揭示了V1在全局视觉整合中的作用,尤其是上下文对细胞响应的快速调节。李的动态模型提出V1可生成视觉显著性图,支持前注意分割和注意力引导。未来研究聚焦于V1在注意力、意识和硬件实现中的潜在应用,推动视觉神经科学与人工智能的交叉发展。

7z8x2c4v6b9的博客 146

【动态导通电阻】GaN HEMT动态导通电阻的精确测量

2023年7月,瑞士洛桑联邦理工学院的Hongkeng Zhu和Elison Matioli在《IEEE Transactions on Power Electronics》期刊发表文章,提出了一种稳态测量方法,用于研究氮化镓(GaN)高电子迁移率晶体管(HEMT)的动态导通电阻(Ron)。实验结果显示,商业GaN器件在稳态下的动态Ron变化显著,稳定时间可达数分钟且与电压相关。传统的脉冲测量方法由于测试时间不足,可能导致结果不准确。该

荷塘阅色 1379

【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

理论上我们选择 Qt 的版本越新越好,这是当然的,不过我们还是要确定一个版本是必须的, 因为日后写好的程序要长期运行在一个确定的版本里,避免随意升级带来其他兼容性问题,或者重复重复移植等工作。简单的来说,Qt 可以做很多东西,好比如 Windows 下的软件也有很多是 Qt 开发的,这里我很喜欢它的可移植性,一份代码可以无需任何修改或者小修改就可以在其他平台上运行。执行安装指令后,将会弹出 Qt 的安装界面,这与 Windows 下的 Qt 安装步骤一样,安装选择目录时,默认安装目录即可。

cj_lsk的博客 1万+

国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一、概念题 1简述可测试性测度与两个主要的测度指标的含义; 2以March C-算法为例,说明March算法的构成,以及March C-算法的故障覆盖率; 3“效果-原因”诊断法和“原因效果诊断法”的不同; 4列举四条扫描设计时出现的问 题及解决办法; 5最少写出1149.1与1500的五点不同; = = = = =

无名何许人的博客 1150

C++与Qt实战:课程设计选题管理系统开发全解析

C++作为经典的面向对象编程语言,其核心价值在于通过类、继承、多态等机制构建复杂、高效的软件系统。Qt框架则在此基础上,提供了强大的跨平台GUI开发能力,其信号与槽机制是实现界面与业务逻辑解耦的关键。结合两者,开发者能够高效构建兼具稳定性和良好用户体验的桌面应用程序,广泛应用于教育管理、小型办公系统等场景。本文聚焦于一个具体的课程设计选题管理系统,深入剖析其从需求分析、数据模型设计到界面布局与事件处理的完整实现路径,并针对开发中常见的`中文乱码`和`窗口缩放`等实际问题,提供经过验证的解决方案与工程实践指南

weixin_30784501的博客 409

高通Camx功能feature分析之八:高通NCS服务之架构和初始化

本文介绍了高通NCS(NONCameraSensor)服务的架构与初始化流程。NCS服务通过QMI接口访问非相机传感器,为CameraEIS、AEC等算法节点提供陀螺仪、加速度计等传感器数据支持。文章详细解析了NCS服务的分层架构,包括客户端、服务端、QSEE接口实现等组件,并重点分析了初始化过程中获取传感器列表、查询能力等关键步骤。通过camxsetting.xml中的enableNCSService开关控制服务启动,初始化过程涉及QSEE单例创建、传感器能力查询等核心操作。后续文章将继续深入讲解相关技术

931

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Qt C++图书管理系统:课程设计实战与二次开发指南

数据库管理系统是计算机科学的核心基础,它通过结构化查询语言(SQL)实现对数据的增删改查等操作,其原理在于将数据组织为表、行、列的形式,并通过事务保证数据一致性。这项技术的价值在于为各类应用提供可靠的数据持久化方案,是软件开发不可或缺的组成部分。在工程实践中,结合图形用户界面(GUI)框架,可以快速构建出直观易用的桌面管理软件,广泛应用于原型开发、教学演示和课程设计等场景。本文聚焦于一个典型的实战案例——基于Qt框架和C++语言开发的图书管理系统,该项目完整实现了图书与读者的信息管理、借阅归还流程,并采用了

weixin_30411239的博客 361

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Qt安装新规后,如何为你的C++项目快速搭建Qt5.15 LTS或Qt6开发环境?

本文详细介绍了在Qt安装新规下,如何快速搭建Qt5.15 LTS或Qt6开发环境的实用指南。通过版本特性对比、定制化组件方案、环境验证及疑难排雷,帮助开发者高效配置开发环境,特别适用于Windows10平台下的C++项目开发。

weixin_33709590的博客 518

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C及C++标准与QT版本介绍

C及C++标准与QT版本介绍 一.软件规范及组织 GNU是“GNU's Not Unix”的缩写,是GNU计划(GNU Project) GPL全称是GNU General Public License,中文名为GNU通用公共许可证。 3.POXIS(Portable Operating System Interface) System V是由AT&T开发的Unix操作系统的一个版本,在1983年首次发布。 二.C语言与C++标准 2.C++标准: 三.QT版本与选择: 注意:Qt6不支持Windows 7

热土程序园,利他愉己~ 1478

Qt C++图书管理系统:面向对象课程设计实战指南

面向对象程序设计是计算机专业的核心课程,其核心思想在于通过类与对象来模拟现实世界,实现代码的模块化、可重用和易维护。在C++实践中,结合图形用户界面(GUI)框架进行项目开发,能有效提升工程实践能力。Qt作为跨平台的C++ GUI框架,其信号与槽机制、Model/View架构为构建数据驱动的桌面应用提供了强大支持。JSON作为一种轻量级的数据交换格式,常用于本地数据持久化,是实现配置存储和简单数据管理的实用技术。将这些技术融合,可以构建出架构清晰、功能完备的管理系统,例如一个典型的图书管理系统。本项目正是基

congdi7904的博客 311

QT5.15+OpenCV实战:3小时开发人脸识别应用

我测试时发现它的预装环境已经包含了常用开发工具,省去了繁琐的配置过程。实际开发中发现,QT的信号槽机制和OpenCV的Mat对象配合起来非常高效,适合做这类实时视频处理应用。整个过程踩了不少坑,但也积累了一些实战经验,特别记录下从环境搭建到功能实现的完整流程,希望能帮到有类似需求的开发者。整个项目给我的体会是,虽然环境配置有些门槛,但一旦跑通后,QT+OpenCV的组合确实能快速实现高质量的跨平台视觉应用。人脸检测算法用的是OpenCV的CascadeClassifier,加载预训练的haar特征文件。

ThunderstormLynx23的博客 718

qt-C++笔记之ubuntu22.04源码安装Qt6.8.2

Ubuntu 18.04 上安装 glibc 2.28 支持 QT6:https://xujinzh.github.io/2024/01/05/ubuntu-18-04-install-glibc2-28/index.html。安装参考链接:https://www.ics.com/blog/how-build-qt-640-source-ubuntu-linux。完成以上步骤后,Qt Creator 就已关联了新安装的 Qt6 环境,可以正常编译和调试基于 Qt6 开发的应用程序。在打开的对话框中点击。

小勇博客 1761
上一篇: QT第12-14节课程笔记-类的引入
下一篇: QT第16节课程笔记-引用
上官可编程
博客等级 码龄14年 1398粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上官可编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值