WIN32 桌面应用编程综合实验一学习记录

文章目录

    • 引用传递和指针传递的区别和联系
    • 如何创建一个空的WINDOWS桌面项目
    • C++编程中函数声明、定义和链接的基本概念


引用传递和指针传递的区别和联系

case ID_SETTING_FONT:GetDrawFont(hWnd, gs_logFont, &gs_TextColor); break;

logFontpColor 的用法体现了 C++ 中两种不同的参数传递方法:引用传递和指针传递

从某种角度来看,引用传递(如 LOGFONT& logFont)和指针传递(如 COLORREF* pColor)在效果上是相似的,尤其是在它们允许函数修改外部传入变量的这一点上。但是,它们在语法和某些语义上存在差异:

  1. 修改外部变量:
  • 无论是引用还是指针传递,函数都能修改调用者传递的变量。
  • 在引用传递中,你直接操作原始变量,就像它是本地变量一样。
  • 在指针传递中,你需要通过指针间接操作原始变量。
  1. 语法和可读性:
  • 引用传递在使用时更像是直接操作变量,这使得代码通常更简洁、更易读。
  • 指针传递涉及间接引用(通过指针),这在语法上更复杂一些,需要显式地使用指针和解引用操作。
  1. 可选参数和空值处理:
  • 指针可以被设置为 NULL 或 nullptr,这允许函数检测和处理“没有对象”的情况,使指针传递适合于可选参数。
  • 引用必须引用某个实际存在的对象,不能是空的,因此它不适合表示可选的参数。
  1. 安全性:
  • 引用通常被认为在某些方面更安全,因为它们保证引用了一个有效的对象(除非你有非常不安全的代码)。
  • 指针可能是 NULL,或者可能指向无效的内存区域,这增加了出错的可能性。

综上所述,虽然这两种方法在允许函数修改传入变量这一点上是相似的,但它们各有特点和适用场景。引用传递适合于必须提供的参数,而指针传递更灵活,适合于可选参数或可能不提供的参数。


如何创建一个空的WINDOWS桌面项目

在这里插入图片描述

但上述操作会创建一个全新的空文件,因此是不推荐的,如果选用用下面的WINDOWS桌面应用程序,代码框架会自动生成,如图

在这里插入图片描述

自动生成的框架界面如下图所示:

在这里插入图片描述


C++编程中函数声明、定义和链接的基本概念

  1. 头文件和函数声明:头文件(通常是.h或.hpp文件)用于声明函数、类、变量等。声明仅仅是告诉编译器该函数的存在,其具体实现(定义)可以在别处。

  2. 源文件和函数定义:函数的具体实现(即定义)通常放在.cpp文件中。这个定义是函数声明的具体实现,包含了函数应当执行的具体代码。

  3. 包含头文件:当您在一个.cpp文件中包含了声明函数的头文件时,您实际上是在告诉编译器:这里有一些函数、类等的声明,请在编译时考虑它们

  4. 链接过程:在C++中,当您编译一个项目时,编译器首先编译每个源文件(.cpp文件),将它们转换成对象文件(.obj文件)。然后,链接器将所有的对象文件和必要的库文件一起链接,生成最终的可执行文件。在链接过程中,如果一个.cpp文件中调用了另一个.cpp文件中定义的函数,链接器将负责找到这个函数的定义并正确地链接它们。

  5. Visual Studio的工作方式:在Visual Studio这样的集成开发环境中,当您创建一个项目并添加多个.cpp文件时,它会自动处理编译和链接的过程。只要您正确地在一个.cpp文件中定义了函数,并在其他需要调用这个函数的.cpp文件中包含了相应的头文件,Visual Studio会在构建过程中自动找到并链接这些函数定义。

总结:在您的情况下,如果您在一个头文件中声明了函数,在一个.cpp文件中定义了它,并且另一个.cpp文件包含了这个头文件,那么只要这些文件都是同一个Visual Studio项目的一部分,Visual Studio会在编译和链接过程中自动处理一切,确保函数能被正确找到和使用

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

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

相关文章

stm32的规则采样与注入采样的理解

规则与注入转换 在STM32中,规则采样(Regular Conversion)和注入采样(Injected Conversion)是用于模数转换的两种不同模式。 规则采样(Regular Conversion):规则采样是STM32中最常用…

面试算法105:最大的岛屿

题目 海洋岛屿地图可以用由0、1组成的二维数组表示,水平或竖直方向相连的一组1表示一个岛屿,请计算最大的岛屿的面积(即岛屿中1的数目)。例如,在下图中有4个岛屿,其中最大的岛屿的面积为5。 分析 将岛屿…

山东名岳轩印刷包装携专业包装袋盛装亮相2024济南生物发酵展

山东名岳轩印刷包装有限公司盛装亮相2024第12届国际生物发酵展,3月5-7日山东国际会展中心与您相约! 展位号:1号馆F17 山东名岳轩印刷包装有限公司是一家拥有南北两个生产厂区,设计、制版、印刷,营销策划为一体的专业…

JavaSec基础 反射修改Final修饰的属性及绕过高版本反射限制

反射重拾 半年没碰java了 先写点基础回忆一下 反射弹计算器 public class Test {public static void main(String[] args) throws Exception {Class<?> clazz Class.forName("java.lang.Runtime");clazz.getDeclaredMethod("exec", String.cla…

springBoot-自动配置原理

以下笔记内容&#xff0c; 整理自B站黑马springBoot视频&#xff0c;抖音Holis 1、自动配置原理 1.收集Spring开发者的编程习惯&#xff0c;整理开发过程使用的常用技术列表一>(技术集A) 2.收集常用技术(技术集A)的使用参数&#xff0c;整理开发过程中每个技术的常用设置列表…

灵活轻巧的java接口自动化测试实战

前言 无论是自动化测试还是自动化部署&#xff0c;撸码肯定少不了&#xff0c;所以下面的基于java语言的接口自动化测试&#xff0c;要想在业务上实现接口自动化&#xff0c;前提是要有一定的java基础。 如果没有java基础&#xff0c;也没关系。这里小编也为大家提供了一套jav…

U盘、硬盘无法打开,修复RAW磁盘或分区,硬盘变成raw格式如何恢复,数据恢复

本文持续更新&#xff0c;针对遇到的数据丢失问题进行详细记录 磁盘变成RAW的可能原因 突然断电或关机文件系统丢失或损坏病毒或恶意软件感染坏扇区磁盘损坏 以下解决方案针对非病毒损坏 通过Windows自带的工具进行恢复&#xff08;CHKDSK命令&#xff09; 1.连接硬盘 2.…

springcloud bus消息总线

简介 Spring Cloud Bus 配合Spring Cloud Config 使用可以实现配置的动态刷新。 Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;它整合了Java的事件处理机制和消息中间件的功能。Spring Clud Bus目前支持RabbitMQ和Kafka。 Spring C…

TDengine 被 Frost Sullivan 评为全球最佳工业数据管理解决方案

近日&#xff0c;TDengine 被国际知名咨询公司沙利文&#xff08;Frost & Sullivan&#xff09;评为全球最佳工业数据管理解决方案&#xff0c;赢得了 2023 年客户价值领导力奖&#xff08;Frost & Sullivan duoxie&#xff09;&#xff0c;该奖项重点关注引领行业创新…

这些开源自动化测试框架,会用等于白嫖一个w

作者&#xff1a;黑马测试 链接&#xff1a;https://www.zhihu.com/question/19923336/answer/2585952461 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 随着计算机技术人员的大量增加&#xff0c;通过编写代码来…

设计模式——工厂方法模式(Factory Method Pattern)

简单工厂模式 概述 说工厂方法模式之前&#xff0c;先说下简单工厂模式&#xff0c;简单工厂模式并不属于GoF 23个经典设计模式&#xff0c;但通常将它作为学习其他工厂模式的基础&#xff0c;它的设计思想很简单&#xff0c;其基本流程如下&#xff1a;首先将需要创建的各种不…

顺序栈之共享栈实现——C语言

参考书&#xff1a;数据结构教程 第5版 李葆春 P83 #include <stdio.h> #include <string.h> #include <stdlib.h>#define MaxSize 10/*共享栈*/ typedef struct {char data[MaxSize];int top1,top2,len; }DStack;/*初始化*/ void InitStack(DStack *s){s-…

【Huggingface】如何访问Huggingface,Huggingface镜像

镜像站&#xff1a; https://hf-mirror.com/本站域名 hf-mirror.com&#xff0c;用于镜像 huggingface.co 域名。 更多用法&#xff08;多线程加速等&#xff09;详见这篇文章。简介&#xff1a; 方法一&#xff1a;使用huggingface 官方提供的 huggingface-cli 命令行工具。…

解决不同请求需要的同一实体类参数不同(分组校验validation)

问题概述 新增目录是自动生成id&#xff0c;不需要id参数&#xff1b;更新目录需要id&#xff0c;不能为空 pom.xml中已有spring-boot-starter-validation依赖 <!--validation(完成属性限制&#xff0c;参数校验)--><dependency><groupId>org.springframew…

“揭秘性能测试工具:优化软件性能的关键秘籍“

性能测试工具的设计宗旨是为了模拟用户对软件应用程序或系统的各种操作&#xff0c;旨在评估关键的性能指标&#xff0c;包括响应时间、吞吐量、并发能力和资源利用率。 通过这些工具模拟的多用户环境&#xff0c;我们能够产生与实际工作负载相似的条件&#xff0c;并监测系统…

业界首款PCIe 4.0/5.0多通道融合接口SSD技术解读

之前小编写过一篇文章劝大家不要碰PCIe 5.0 SSD&#xff0c;详细内容&#xff0c;可以再回顾下&#xff1a; 扩展阅读&#xff1a;当下最好不要入坑PCIe 5.0 SSD 如果想要进一步了解PCIe 6.0&#xff0c;欢迎点击阅读&#xff1a; 浅析PCIe 6.0功能更新与实现的挑战 PCIe 6.…

pyqt调用UI和开启子进程

UI制作 qrc 注意调用UI前把样式表里绑定的资源(qrc)转换成py导入进去 xxx.qrc转xxx.py 两种方法 1命令 pyrcc5 -o icons_rc.py icons.qrc 2外部工具pyrcc 实参 -o $FileNameWithoutExtension$.py $FileNameWithoutExtension$.qrcsdz.qrc→→sdaz.py 在代码里写 import…

Influxdb2修改管理员密码

通过恢复管理员令牌来重置InfluxDB2管理员的密码 1.找到数据库的配置文件 一般为config.json 2.配置文件的的blod文件配置 3.在这个混合文本和二进制json文件中搜索已知的用户名或token之类的字符串。 例如&#xff1a; "id":"0bd73badf2941000","…

AI-数学-高中-3.二次函数的根的分布问题的解题方法

原作者学习视频&#xff1a;二次】3二次函数根分布问题&#xff08;中档&#xff09;_哔哩哔哩_bilibili 一、伟达定理&#xff08;根与0比较的二次函数&#xff09; 示例&#xff1a; 二、画图法&#xff1a; 1.开口方向的确定&#xff0c;有的示例可能存在向上、下两种情况…

Centos7 手动更改系统时间

文章目录 1.更改系统时间2.写入系统时间3.查看是否写入成功 1.更改系统时间 date -s "2017-12-18 09:40:00"2.写入系统时间 hwclock -w3.查看是否写入成功 timedatectl