QT实操中遇到的一些(C++)疑惑点汇总

QT实操中 遇到的一些C++疑惑点汇总

1.实例化对象的两种方法及其访问方式

1.1 示例
1.2 总结

2.基类成员的访问

2.1 直接访问继承的基类成员

2.1.1示例代码
2.1.2 输出结果

2.2 使用作用域解析符来显式调用基类成员函数

2.2.1 示例代码
2.2.2 输出结果

2.3 使用 this 指针访问基类成员

2.3.1 示例代码
2.3.2 输出结果

2.4 总结

3.枚举 与 运算符 :: 的使用

3.1 困惑的引入

3.2 C++枚举的总结

3.2.1 枚举的走义
3.2.2 枚举的使用
1>声明
2>条件语句中使用
3.2.3 使用枚举的例子(类名::枚举成员)
3.2.3 枚举的范围和作用域
3.2.4 强枚举的优点

3.3 运算符::的使用

3.3.1 静态成员
3.3.2 命名空间成员
3.3.3 枚举或常量
3.3.4 基类成员
3.3.5 总结

1. 实例化对象的两种方法及其访问方式

在C++中,如果对象是通过new关键字创建的,那它的类型就是指针,需要使用->来访问其成员。而如果对象是直接实例化的(不使用new),那它是一个具体的对象实例,用.来访问成员。
在这里插入图片描述

1.1 示例
  1. 使用new创建对象指针

    QRadioButton* radioButton = new QRadioButton(this); // 创建一个指针指向 QRadioButton 对象
    radioButton->setText("开关一"); // 使用 "->" 来访问成员
    
  2. 直接实例化对象

    QRadioButton radioButton; 		  // 创建一个 QRadioButton 的实例对象
    radioButton.setText("开关一"); 	// 使用 "." 来访问成员
    
1.2 总结
  • 使用new:对象是指针类型,成员访问使用->
  • 直接实例化:对象是值类型(直接实例),成员访问使用.

->.的选择取决于对象是指针还是实例化的具体对象。


2. 基类成员的访问

  • 在 C++ 中,如果你有一个派生类的对象,并希望引用该对象的基类成员(包括变量或函数),可以通过直接访问显式调用基类作用域的方式实现。

  • 本质都是通过::,注意区别于继承的操作符,继承使用,以下是一些常见方法:

    • 直接访问:如果基类成员是publicprotected,可直接通过::访问。
    • 作用域解析符:通过Base::成员名形式访问同名基类成员。
    • this指针:使用this->Base::成员名可以更显式地标明访问基类成员。
2.1 直接访问继承的基类成员

如果基类成员是publicprotected,并且派生类是通过publicprotected继承基类,可以直接在派生类的对象中访问这些成员。

2.1.1 示例代码
#include <iostream>
#include <string>class Base {
public:int baseVar;  // 基类的变量成员Base(int val) : baseVar(val) {} // 基类构造函数初始化成员变量void showBaseVar() const {std::cout << "基类成员 baseVar: " << baseVar << std::endl;}
};class Derived : public Base {
public:int derivedVar;Derived(int baseVal, int derivedVal) : Base(baseVal), derivedVar(derivedVal) {}void showValues() {// 直接访问基类成员变量std::cout << "基类成员 baseVar: " << baseVar << std::endl;// 直接调用基类成员函数showBaseVar();// 使用派生类成员变量std::cout << "派生类成员 derivedVar: " << derivedVar << std::endl;}
};int main() {Derived derivedObj(10, 20);  // 创建派生类对象derivedObj.showValues();     // 输出基类和派生类成员return 0;
}
2.1.2 输出结果
基类成员 baseVar: 10
基类成员 baseVar: 10
派生类成员 derivedVar: 20

showValues 方法中,我们直接使用 baseVarshowBaseVar() 来访问基类的成员变量和函数。

2.2 使用作用域解析符来显式调用基类成员函数

当派生类有与基类同名的成员函数或变量时,可以使用作用域解析符(::)来访问基类的成员,以避免名称冲突。

2.2.1 示例代码
#include <iostream>class Base {
public:void display() {std::cout << "Base 类的 display() 函数" << std::endl;}
};class Derived : public Base {
public:void display() {std::cout << "Derived 类的 display() 函数" << std::endl;}void show() {// 调用派生类的 display() 函数display();// 调用基类的 display() 函数Base::display();}
};int main() {Derived derivedObj;derivedObj.show();return 0;
}
2.2.2 输出结果
Derived 类的 display() 函数
Base 类的 display() 函数

Derived::show 中,通过 Base::display() 显式调用基类的 display() 函数。

2.3 使用 this 指针访问基类成员

当基类成员与派生类成员同名时,可以用this指针加上作用域解析符来明确访问基类成员。

2.3.1 示例代码
#include <iostream>class Base {
public:int var = 5;
};class Derived : public Base {
public:int var = 10;void show() {std::cout << "派生类 var: " << var << std::endl;           // 访问派生类的 varstd::cout << "基类 var: " << this->Base::var << std::endl;  // 显式访问基类的 var}
};int main() {Derived derivedObj;derivedObj.show();return 0;
}
2.3.2 输出结果
派生类 var: 10
基类 var: 5
2.4 总结
  • 直接访问:如果基类成员是publicprotected,可直接访问。
  • 作用域解析符:通过Base::成员名形式访问同名基类成员。
  • this指针:使用this->Base::成员名可以更显式地标明访问基类成员。

3. 枚举 与 运算符::的使用

3.1 困惑的引入

上代码片段:

	/* 判断文件是否存在 */if (file.exists() ){/* 以只读的方式打开 */file.open(QFile::ReadOnly);     // 参数为QFile的枚举值ReadOnly/* 以字符串的方式保存读出的结果 */QString styleSheet = QLatin1String(file.readAll());/* 设置全局样式 */qApp->setStyleSheet(styleSheet);/* 关闭文件 */file.close();}

一个类中定义了枚举成员,类的实例化对象可通过 类名::枚举成员 的方式来引用该枚举值。

ps:我还以为有点钻牛角尖了,巨困惑QFile::ReadOnly到底是个啥?1> 开始还理解成继承,一想这个作为一个参数,怎么可能是一个类;2> 后面想着肯定是参数,又知道::是引用成员变量,那么类咋还能直接一个常量?( 查了ReadOnly是一个八进制数进行的替换 )3> 然后就查了C++枚举,后觉得没理解错啊,一查,还真”**一个类中定义了枚举成员,类的实例化对象可以通过 `类名::枚举成员` 的方式来引用该枚举值**。“!

因此,特来进行C++枚举的总结,和**::运算符的使用**!

3.2 C++枚举的总结

枚举(enum)在 C++ 中是一种用户自定义的数据类型,用于定义一组具名的整型常量。它可以使代码更易读、易维护,并能提供更强的类型安全性。以下是枚举的定义与使用的详细讲解:

3.2.1 枚举的定义

枚举可以通过 enum 关键字进行定义。基本的枚举定义如下:

enum Color {Red,Green,Blue
};

在这个示例中,Color 是枚举类型的名称,RedGreenBlue 是枚举值。默认情况下,Red 的值为 0Green 的值为 1Blue 的值为 2

自定义枚举值

你还可以为枚举值指定特定的整数值:

enum Status {Success = 0,Error = 1,Unknown = -1
};
3.2.2 枚举的使用
1> 声明
Color myColor;
myColor = Red;  // 将枚举值赋给变量
2> 条件语句中使用
if (myColor == Green) 
{// 处理绿色的情况
}
3.2.3 使用枚举的例子( 类名::枚举成员 )
  • 一个类中定义了枚举成员,类的实例化对象可以通过 类名::枚举成员 的方式来引用该枚举值

  • 这种方式能够清晰地表明枚举值的所属类,有助于提高代码的可读性。

下面是一个具体的示例:

#include <iostream>class MyClass 
{
public:// 定义枚举类型 Colorenum Color {Red,Green,Blue};
};int main() {// 直接通过类名引用枚举值MyClass::Color myColor = MyClass::Green;// 根据颜色值输出不同的信息switch (myColor) {case MyClass::Red:std::cout << "The color is Red." << std::endl;break;case MyClass::Green:std::cout << "The color is Green." << std::endl;break;case MyClass::Blue:std::cout << "The color is Blue." << std::endl;break;}return 0;
}
3.2.3 枚举的范围和作用域

在 C++11 及之后的版本中,可以使用 强枚举enum class),它提供了更好的作用域控制和类型安全:

enum class Fruit 
{Apple,Banana,Orange
};Fruit myFruit = Fruit::Apple;  // 访问枚举值需要指定作用域
3.2.4 强枚举的优点
  • 类型安全:强枚举不会隐式转换为整数类型,防止错误使用。
  • 作用域控制:枚举值属于其定义的枚举类型,避免名称冲突。
3.3 运算符::的使用
  • 运算符 :: 的分类总结,涵盖静态成员、命名空间成员、枚举或常量、基类成员,并进行了合并说明。

  • 运算符::作用域解析运算符,用于访问特定作用域中的成员,如类、命名空间、枚举等

3.3.1 静态成员
  • 定义: 属于类本身而非某个实例的成员,所有实例共享同一份数据。

  • 访问方式: 类名::静态成员名

  • 示例:

    cpp复制代码class MyClass {
    public:static int count;  // 静态成员变量声明
    };int MyClass::count = 0;  // 静态成员变量定义
    
3.3.2 命名空间成员
  • 定义: 用于组织代码,避免命名冲突,可以包含函数、变量等。

  • 访问方式: 命名空间名::成员名

  • 示例:

    cpp复制代码namespace MyNamespace {int value = 42;  // 命名空间中的变量
    }int val = MyNamespace::value;  // 访问命名空间中的变量
    
3.3.3 枚举或常量
  • 定义: 枚举是一种用户自定义类型,包含一组命名的整型常量。常量是固定值。

  • 访问方式: 类名::枚举值命名空间名::枚举值

  • 示例

    :

    class MyClass {
    public:enum Color { Red, Green, Blue };  // 枚举定义
    };MyClass::Color c = MyClass::Red;  // 访问枚举值
    
3.3.4 基类成员
  • 定义: 基类是派生类的父类,基类成员可以是数据成员或成员函数。

  • 访问方式: 基类名::成员名(特别是在派生类中使用)

  • 示例:

    class Base {
    public:void show() { std::cout << "Base" << std::endl; }
    };class Derived : public Base {
    public:void show() { std::cout << "Derived" << std::endl; }void display() {Base::show();  // 访问基类的 show 方法}
    };
    
3.3.5 总结
  • 作用域: :: 运算符用于明确访问不同作用域中的成员,避免命名冲突。

  • 共享性: 静态成员是类共享的,命名空间和枚举值是全局可见的,基类成员可通过派生类访问。
    名`(特别是在派生类中使用)

  • 示例:

    class Base {
    public:void show() { std::cout << "Base" << std::endl; }
    };class Derived : public Base {
    public:void show() { std::cout << "Derived" << std::endl; }void display() {Base::show();  // 访问基类的 show 方法}
    };
    

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

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

相关文章

图形学笔记 - 4. 几何 -网格操作和阴影映射

文章目录 网格操作&#xff1a;几何处理细分Loop细分Catmull-Clark细分&#xff08;一般网格&#xff09;网格简化 阴影 Shadows可视化阴影映射阴影映射阴影贴图的问题 网格操作&#xff1a;几何处理 网格细分网格简化网格正则化 网格细分&#xff08;上采样&#xff09; 网…

OBOO鸥柏车载广告屏:28.6寸液晶一体机的技术革新与应用前景

在数字化迅速发展的今天&#xff0c;OBOO鸥柏推出的28.6寸车载长条形液晶广告屏一体机成为了市场的一大亮点。这款产品不仅具有超窄边框的高亮设计&#xff0c;还利用异形激光切割技术&#xff0c;支持多种形状如圆形、方形及三角形展示&#xff0c;极大地提升了商用和工业屏幕…

Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系

参考spring-cloud-alibaba github wiki说明&#xff1a;版本说明 下面截取说明&#xff1a; 2022.x 分支 2021.x 分支 2.2.x 分支 组件版本关系

Springboot + vue 健身房管理系统项目部署

1、前言 ​ 许多人在拿到 Spring Boot 项目的源码后&#xff0c;不知道如何运行。我以 Spring Boot Vue 健身房管理系统的部署为例&#xff0c;详细介绍一下部署流程。大多数 Spring Boot 项目都可以通过这种方式部署&#xff0c;希望能帮助到大家。 ​ 2、项目查看 ​ 首…

SOL链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展&#xff0c;Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu&#xff0c;再到更多细分的 Meme 项目&#xff0c;这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节&#xff5c;征文# 博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…

主机管理工具 WGCLOUD v3.5.6 更新了哪些特性

WGCLOUD-v3.5.6 更新说明&#xff0c;2024-11-20发布 1. 新增&#xff0c;个性化采集&#xff0c;查看 2. 新增&#xff0c;支持达梦数据库做数据源来存贮监控数据&#xff0c;查看说明(8) 3. 新增&#xff0c;日志监控支持配置自动处理指令&#xff0c;当发现日志出现告警关键…

设计模式之 享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;用于减少系统中对象的数量&#xff0c;从而节省内存和提升性能。它通过共享相同的对象来避免重复创建类似的对象。该模式尤其适用于对象数量庞大、且重复内容较多的场景。 核心思想&#x…

yolov5 数据集分享:纯干货

数据集分享&#xff1a;纯干货 1. 遇见数据集&#xff1a;这是一个国内的数据集搜索引擎&#xff0c;索引了国内外的大部分网站&#xff0c;提供最新的数据集推荐。[遇见数据集网站](https://www.selectdataset.com/) 2. Kaggle&#xff1a;一个领先的数据科学和机器学习爱好者…

如何实现3D模型在线展示、互动和分享?

实现3D模型在线展示、互动和分享&#xff0c;可以通过多种途径和技术手段来完成。以下是一些具体的方法和步骤&#xff1a; 一、选择适合的3D模型展示平台 首先&#xff0c;你需要选择一个支持3D模型在线展示、互动和分享的平台。这些平台通常提供用户友好的界面和工具&#x…

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

CANoe录制和回放CAN报文

目录 1、录制报文 2、离线回放 3、在线回放 3.1、在线回放设置 CANoe是一款用于汽车电子测试的工具&#xff0c;它可以模拟CAN网络中的各种设备&#xff0c;并支持CAN报文的录制和回放功能&#xff0c;方便我们远程调试。 1、录制报文 在Measurement Setupk面板点击Loggi…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 主要特性 易于部署&#xff0c;提供四种部署方式&#xff0c;包括Standalone、Cluster、Docker和…

XCode Build时遇到 .entitlements could not be opened 的问题

遇到错误 在构建成功的XCode工程上&#xff0c;手动打开XCode并Build&#xff0c;遇到以下问题&#xff1a; The file .entitlements could not be opened. Did you forget to declare this file as an output of a script phase or custom build rule which produces it 打…

关于一次开源java spring快速开发平台项目RuoYi部署的记录

关于一次开源java spring快速开发平台项目RuoYi部署的记录 本次因为需要一些练习环境&#xff0c;想要快速搭建一个javaweb 项目作为练习环境&#xff0c;经过查询和实验找到一个文档详细&#xff0c;搭建简单&#xff0c;架构也相对比较新的开源项目RuoYi。 项目介绍&#xf…

原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型

无论是在什么手机机型下&#xff0c;自定义的导航都和右侧的胶囊水平一条线上。如图下 以上图iphone12&#xff0c;13PRo 以上图是没有带黑色扇帘的机型 以下是调试器看的wxml的代码展示 注意&#xff1a;红色阔里的是自定义导航&#xff08;或者其他的logo啊&#xff0c;返回之…

列出D3的所有交互方法,并给出示例

D3.js 提供了丰富的交互方法&#xff0c;可以用来增强图表的用户交互体验。以下是一些常用的交互方法及其示例&#xff1a; 1. 鼠标事件 on("mouseover", function) 用途: 当鼠标悬停在元素上时触发。示例:svg.selectAll(".bar").on("mouseover&qu…

小程序-使用 iconfont 图标库报错:Failed to load font

官方默认可以忽略此错误&#xff0c;在清除缓存后首次刷新会显示此错误&#xff0c;重新渲染错误消失 解决方法&#xff1a; 在 iconfont 图标库选择项目设置 选中 Base64 保存&#xff0c;重新点击链接 -> 复制代码到项目中 操作步骤&#xff1a;

[免费]SpringBoot+Vue毕业设计论文管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue毕业设计论文管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue毕业设计论文管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信…

System Control Units (SCU)

本文对Ifx TC3xx的System Control Units (SCU)模块进行介绍&#xff0c;此网页为汇总连接&#xff0c;具体模块见对应超链接。 系统控制单元&#xff08;SCU&#xff09;是一组控制各种系统功能的子模块&#xff0c;包括以下模块&#xff1a; Reset Control (RCU)Trap genera…