文章目录
- 引用传递和指针传递的区别和联系
- 如何创建一个空的WINDOWS桌面项目
- C++编程中函数声明、定义和链接的基本概念
引用传递和指针传递的区别和联系
case ID_SETTING_FONT:GetDrawFont(hWnd, gs_logFont, &gs_TextColor); break;
logFont
和 pColor
的用法体现了 C++ 中两种不同的参数传递方法:引用传递和指针传递
从某种角度来看,引用传递(如 LOGFONT& logFont
)和指针传递(如 COLORREF* pColor
)在效果上是相似的,尤其是在它们允许函数修改外部传入变量的这一点上。但是,它们在语法和某些语义上存在差异:
- 修改外部变量:
- 无论是引用还是指针传递,函数都能修改调用者传递的变量。
- 在引用传递中,你直接操作原始变量,就像它是本地变量一样。
- 在指针传递中,你需要通过指针间接操作原始变量。
- 语法和可读性:
- 引用传递在使用时更像是直接操作变量,这使得代码通常更简洁、更易读。
- 指针传递涉及间接引用(通过指针),这在语法上更复杂一些,需要显式地使用指针和解引用操作。
- 可选参数和空值处理:
- 指针可以被设置为 NULL 或 nullptr,这允许函数检测和处理“没有对象”的情况,使指针传递适合于可选参数。
- 引用必须引用某个实际存在的对象,不能是空的,因此它不适合表示可选的参数。
- 安全性:
- 引用通常被认为在某些方面更安全,因为它们保证引用了一个有效的对象(除非你有非常不安全的代码)。
- 指针可能是 NULL,或者可能指向无效的内存区域,这增加了出错的可能性。
综上所述,虽然这两种方法在允许函数修改传入变量这一点上是相似的,但它们各有特点和适用场景。引用传递适合于必须提供的参数,而指针传递更灵活,适合于可选参数或可能不提供的参数。
如何创建一个空的WINDOWS桌面项目
但上述操作会创建一个全新的空文件,因此是不推荐的,如果选用用下面的WINDOWS桌面应用程序,代码框架会自动生成,如图
自动生成的框架界面如下图所示:
C++编程中函数声明、定义和链接的基本概念
-
头文件和函数声明:头文件(通常是.h或.hpp文件)用于声明函数、类、变量等。声明仅仅是告诉编译器该函数的存在,其具体实现(定义)可以在别处。
-
源文件和函数定义:函数的具体实现(即定义)通常放在.cpp文件中。这个定义是函数声明的具体实现,包含了函数应当执行的具体代码。
-
包含头文件:当您在一个.cpp文件中包含了声明函数的头文件时,您实际上是在告诉编译器:这里有一些函数、类等的声明,请在编译时考虑它们。
-
链接过程:在C++中,当您编译一个项目时,编译器首先编译每个源文件(.cpp文件),将它们转换成对象文件(.obj文件)。然后,链接器将所有的对象文件和必要的库文件一起链接,生成最终的可执行文件。在链接过程中,如果一个.cpp文件中调用了另一个.cpp文件中定义的函数,链接器将负责找到这个函数的定义并正确地链接它们。
-
Visual Studio的工作方式:在Visual Studio这样的集成开发环境中,当您创建一个项目并添加多个.cpp文件时,它会自动处理编译和链接的过程。只要您正确地在一个.cpp文件中定义了函数,并在其他需要调用这个函数的.cpp文件中包含了相应的头文件,Visual Studio会在构建过程中自动找到并链接这些函数定义。
总结:在您的情况下,如果您在一个头文件中声明了函数,在一个.cpp文件中定义了它,并且另一个.cpp文件包含了这个头文件,那么只要这些文件都是同一个Visual Studio项目的一部分,Visual Studio会在编译和链接过程中自动处理一切,确保函数能被正确找到和使用。