教你如何使用 Visual Studio IDE 正确的进行 C++ 桌面开发

简介: 教你如何使用 Visual Studio IDE 正确的进行 C++ 桌面开发

先决条件


Visual Studio 集成开发环境 (IDE) 提供一组功能,帮助你管理大型和小型代码项目、写入和重构代码以及使用静态分析和功能强大的调试工具检测和更正错误。本文重在介绍在管理项目,写入、测试和调试代码,并将代码部署到其他计算机的过程中所需的每个步骤


b1dc305990a1431b9c86b31dd2e9b68d.png


如果尚未安装 Visual Studio,请在Visual studio2022官网进行下载安装。官网打开->下载 Visual Studio-> 安装 Visual Studio 安装程序->选择工作负载-> 选择各个组件(可选)->安装语言包(可选)-> 选择安装位置(可选)->开始开发、


入门


若要开始使用 Visual Studio IDE 生成 C++ 应用,请按顺序完成下面的过程。


51a97e9bcfb74ba8891422d50f6f3d4b.png

一、演练:使用项目和解决方案 (C++)


介绍如何在 Visual Studio 中创建 C++ 项目,添加代码,然后生成并运行该项目。 本演练中的项目是一个程序,该程序跟踪正在玩各种纸牌游戏的玩家数量。

cc74c1fcb0b24ff1a8518dffa9a6655a.png


在 Visual Studio 中,可以将工作组织为项目和解决方案。 一个解决方案可以包含多个项目,例如,一个 DLL 和一个引用该 DLL 的可执行文件。如果尚未安装,请按照教程完成安装后的后续步骤操作,确保 C++ 组件正确安装且正常工作。


了解 C++ 语言的基础知识以及编译器、链接器和调试程序的用途会很有帮助。 本教程还假定你熟悉 Windows 及其菜单、对话框的使用方式、、


准备工作


若要完成准备工作,需要 Visual Studio 2017 或更高版本,如果尚未安装,请按照教程完成安装后的后续步骤操作,确保 C++ 组件正确安装且正常工作。

了解 C++ 语言的基础知识以及编译器、链接器和调试程序的用途会很有帮助。 本教程还假定你熟悉 Windows 及其菜单、对话框的使用方式


创建项目


若要创建项目,请先选择项目类型模板。 对于每种项目类型,Visual Studio 会设置编译器设置,并根据类型生成起始代码,稍后可修改该代码。 根据使用的 Visual Studio 版本,以下步骤会有所不同。 若要查看 Visual Studio 首选项的文档,请使用“版本”选择器控件。 它位于此页面上目录表的顶部。


在 Visual Studio 中创建项目


  1. 在主菜单中,选择“文件”>“新建”>“项目”,打开“创建新项目”对话框。
  2. 在对话框顶部,将“语言”设置为“C++”,将“平台”设置为“Windows”,并将“项目类型”设置为“控制台”。
  3. 从筛选的项目类型列表中,选择“控制台应用”,然后选择“下一步” 。 在下一页中,输入“游戏”作为项目名称。
  4. 可以接受“位置”下拉列表中的默认位置、输入其他位置或者选择“浏览”按钮,浏览要保存项目的目录 。
  5. 创建项目时,Visual Studio 将该项目放入一个解决方案。 默认情况下,解决方案的名称与项目名称相同。 可以更改“解决方案名称”框中的名称,但是对于此示例,请保留默认名称。
  6. 选择“创建”按钮创建项目。
  7. Visual Studio 创建新的解决方案和项目文件,并为它生成的 Game.cpp 源代码文件打开编辑器。



1730115a0d06b7bd15894162dfa4355b.gif


组织项目和文件

可以使用“解决方案资源管理器”来组织和管理解决方案中的项目、文件及其他资源。

本部分演练演示如何将类添加到项目中。 添加类时,Visual Studio 添加相应的 .h 和 .cpp 文件。 可以在“解决方案资源管理器”中查看结果。


向项目添加类

  1. 如果 Visual Studio 中未显示“解决方案资源管理器”窗口,请在菜单栏上选择“视图”>“解决方案资源管理器”。


  1. 在“解决方案资源管理器”中,选择“游戏”项目 。 在菜单栏上选择“项目”>“添加类”。
  2. 在“添加类”对话框中的“类名”框内输入“Cardgame”。 请勿修改默认的文件名和设置。 选择“确定” 按钮。


  1. Visual Studio 创建新的文件并将其添加到项目。 可以在“解决方案资源管理器”窗口中查看这些文件。 Cardgame.h 和 Cardgame.cpp 文件在编辑器中打开。
  2. 编辑 Cardgame.h 文件,并进行以下更改:


在类定义的左大括号之后添加两个私有数据成员。

1. int players;
2. static int totalParticipants;


修改 Visual Studio 生成的默认构造函数。 在 public: 访问说明符之后,将发现如下所示的行:

Cardgame();

修改构造函数,使其带有一个类型为 int、名为“players”的参数。

Cardgame(int players);

在默认析构函数之后,为名为 GetParticipants 的 static int 成员函数添加内联声明,该成员函数没有参数且返回 totalParticipants 值。

static int GetParticipants() { return totalParticipants; }
  • 对 Cardgame.h 文件进行更改之后,该文件应类似于以下代码:
#pragma once
class Cardgame
{
    int players;
    static int totalParticipants;
public:
    Cardgame(int players);
    ~Cardgame();
    static int GetParticipants() { return totalParticipants; }
};



#pragma once 行通知编译器仅包含一次头文件。

  1. 选择编辑窗格顶部的“Cardgame.cpp”选项卡,打开它进行编辑。
  2. 删除文件中的所有内容,并将其替换为以下代码


#include "pch.h" // 在Visual Studio 2019中删除此行
#include "Cardgame.h"
#include <iostream>
using namespace std;
int Cardgame::totalParticipants = 0;
Cardgame::Cardgame(int players)
    : players(players)
{
    totalParticipants += players;
    cout << players << "玩家开始了新游戏  "
         << totalParticipants << " 球员总数." << endl;
}
Cardgame::~Cardgame()
{
}

输入代码时,可以使用自动完成功能。 例如,如果使用键盘输入此代码,可以输入 pl 或 tot,然后按 Ctrl+空格键。 自动完成功能可为你输入 players 或 totalParticipants。


向主函数添加测试代码


向应用添加一些测试新函数的代码


向项目添加测试代码


// Game.cpp : 定义控制台应用程序的入口点.
//
#include "pch.h" // 在Visual Studio 2019中删除此行
#include "Cardgame.h"
#include <iostream>
using namespace std;
void PlayGames()
{
    Cardgame bridge(4);
    Cardgame blackjack(8);
    Cardgame solitaire(1);
    Cardgame poker(5);
}
int main()
{
    PlayGames();
    return 0;
}


此代码会将测试函数 PlayGames 添加到源代码,并在 main (主函数)内调用。


生成并运行应用项目


接下来,生成项目并运行应用

在菜单栏上,依次选择“生成”>“生成解决方案” 。

来自生成的输出显示在“输出”窗口中。 如果生成成功,输出应类似于

1>------ Build started: Project: Game, Configuration: Debug Win32 ------
1>pch.cpp
1>Cardgame.cpp
1>Game.cpp
1>Generating Code...
1>Game.vcxproj -> C:\Users\<username>\source\repos\Game\Debug\Game.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========


“输出”窗口可以根据不同的生成配置显示不同步骤,但是如果项目生成成功,最后一行应类似于上面显示的输出。

如果生成未成功,请将你的代码与前面步骤中显示的代码进行比较。

4 players have started a new game.  There are now 4 players in total.
8 players have started a new game.  There are now 12 players in total.
1 players have started a new game.  There are now 13 players in total.
5 players have started a new game.  There are now 18 players in total.


  1. 按任意键关闭控制台窗口。

恭喜,你已成功生成应用项目和解决方案。 继续完成下面的教程,详细了解如何在 Visual Studio 中生成 C++ 代码项目。


二、演练:生成项目 (C++)


先决条件

具备 C++ 语言的基础知识

修复编译错误

在 Games.cpp 中,删除最后一行中的分号,使其类似于以下语句:

return 0


  1. 在菜单栏上,依次选择“生成”>“生成解决方案” 。
  2. “错误列表”窗口中的消息指示生成项目过程中出现了错误。 该声明类似于以下错误消息:

error C2143: syntax error: missing ';' before '}'


  1. 若要查看有关此错误的帮助信息,请在“错误列表”窗口中将其突出显示,然后选择 F1 键。
  2. 将分号重新添加到导致语法错误的行的末尾:
return 0;
  1. 在菜单栏上,依次选择“生成”>“生成解决方案” 。
    “输出”窗口中的消息指示项目已成功编译。
1>------ Build started: Project: Game, Configuration: Debug Win32 ------
1>Game.cpp
1>Game.vcxproj -> C:\Users\<username>\source\repos\Game\Debug\Game.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========


三、演练:测试项目 (C++)


在调试模式下运行程序时,可使用断点来暂停程序以检查变量和对象的状态是怎样的。

在本教程中,将在程序运行时观察变量的值,并推导出为什么该值不是想要的的值

先决条件

具备 C++ 语言的基础知识。

完成了上述部分的操作

在调试模式下运行程序


打开 Game.cpp 进行编辑。


选择此代码行:


Cardgame solitaire(1);


要在该行上设置断点,请在菜单栏上选择“调试”>“切换断点”,或选择 F9 键。 行的左侧出现一个红色圆圈,它表示已设置断点。 要删除断点,可再次选择菜单命令或 F9 键。


如果使用鼠标,也可通过单击左边距来设置或删除断点。


在菜单栏上,依次选择“调试”>“启动调试”,或选择 F5 键。


由于程序处于“中断”模式,因此当程序到达断点行时,执行将暂停。 代码行左侧的黄色箭头表示它是要执行的下一行。


要检查变量 Cardgame::totalParticipants 的值,请将指针移到 Cardgame 上,然后将其移到工具提示窗口左侧的扩展控件上。 显示变量名称 totalParticipants 及其值 12。


打开变量 Cardgame::totalParticipants 的快捷菜单,然后选择“添加监视”以在“监视 1”窗口中显示该变量。 也可突出显示一个变量并将其拖动到“监视 1”窗口。


要转到下一代码行,请在菜单栏上依次选择“调试”>“逐过程执行”或选择 F10 键。


“监视 1”窗口中 Cardgame::totalParticipants 的值现在显示为 13。


打开 return 0; 语句的快捷菜单,然后选择“运行到光标处”。 代码左侧的黄色箭头指向要执行的下一语句。


Cardgame 终止时,Cardgame::totalParticipants 数应减少。 此时,Cardgame::totalParticipants 应等于 0,因为已删除所有 Cardgame 实例,但“监视 1”窗口指示 Cardgame::totalparticipants 等于 18。 此差异表明代码中存在 bug。 可


要停止该程序,请在菜单栏上选择“调试”>“停止调试”或选择 Shift+F5 键盘快捷方式


四、演练:调试项目 (C++)


先决条件


  • 假定你具备 C++ 语言的基础知识。

修复含有 bug 的程序


若要查看销毁 Cardgame 对象时发生的情况,请查看 Cardgame 类的析构函数。

在菜单栏上,选择“视图”>“类视图”。

在“类视图”窗口中,展开“游戏”项目树并选择“Cardgame”类来显示类成员和方法 。

打开“~Cardgame(void)”析构函数的快捷菜单,然后选择“转到定义” 。

若要在 Cardgame 终止时减少 totalParticipants,请在 Cardgame::~Cardgame 析构函数的左大括号和右大括号之间键入以下代码。


totalParticipants -= players;
cout << players << "玩家已经完成了他们的游戏。 现在有 "
     << totalParticipantotalParticipants -= players;


在对 Cardgame.cpp 文件进行更改之后,该文件应类似于以下代码:

#include "Cardgame.h"
#include <iostream>
using namespace std;
int Cardgame::totalParticipants = 0;
Cardgame::Cardgame(int players)
    : players(players)
{
    totalParticipants += players;
    cout << players << " 玩家已经完成了他们的游戏。 现在有 "
         << totalParticipants << " 球员总数." << endl;
}
Cardgame::~Cardgame()
{
    totalParticipants -= players;
    cout << players << "玩家已经完成了他们的游戏。 现在有  "
         << totalParticipants << " 球员总数." << endl;
}


  1. 在菜单栏上,依次选择“生成”>“生成解决方案” 。
  2. 生成完成后,可以通过选择菜单栏上的“调试”>“启动调试”或选择 F5 键在调试模式下运行此解决方案。 程序在第一个断点处暂停程序。
  3. 若要逐步执行此程序,请在菜单栏上,选择“调试”>“逐过程执行”或选择 F10 键。
  4. 请注意,执行每个 Cardgame 构造函数后,totalParticipants 的值会增大。 在 PlayGames 函数返回时,由于每个 Cardgame 实例都超出范围且被删除(并且调用析构函数),因此 totalParticipants 会减小。 在刚要执行 return 语句前,totalParticipants 等于 0。
  5. 继续逐步执行此程序直到其退出,或通过在菜单栏上选择“调试”>“运行”或选择F5 键来使其运行。

完结撒花!!下期再见!

相关文章
|
3月前
|
机器学习/深度学习 算法 算法框架/工具
为什么使用C++进行机器学习开发
C++作为一种高性能语言,在某些性能要求极高或资源受限的场景下也具有非常重要的地位。C++的高效性和对底层硬件的控制能力,使其在大规模机器学习系统中发挥重要作用,尤其是当需要处理大数据或实时响应的系统时。
61 3
|
27天前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
45 1
|
1月前
|
传感器 IDE 测试技术
C#一分钟浅谈:Visual Studio IDE 高级功能
【10月更文挑战第24天】本文从初学者角度介绍了 Visual Studio 的高级功能,包括安装与配置、创建项目、运行与调试、常见问题及解决方案(如代码格式化、重构、导航、单元测试、代码分析),以及智能感知、Live Unit Testing、代码生成和代码片段等高级功能,帮助开发者提高效率和代码质量。
47 1
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
88 1
|
2月前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
94 7
WK
|
1月前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
63 0
WK
|
1月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
114 0
|
2月前
|
NoSQL API Redis
如何使用 C++ 开发 Redis 模块
如何使用 C++ 开发 Redis 模块
|
3月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
2月前
|
前端开发 JavaScript C#
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件