使用项目和解决方案
用 Visual Studio 编写 Visual C++ 程序的第一步是选择项目的类型。对于每种项目类型,Visual Studio 都为您设置编译器设置并生成起始代码。
创建新项目
在“文件”菜单中,指向“新建”,然后单击“项目...”。
在“项目类型”区域中,单击“Win32”。然后,在“Visual Studio 已安装的模板”窗格中,单击“Win32 控制台应用程序”。
键入项目名称。在此示例中,我们将使用“游戏”。
创建新项目时,Visual Studio 将该项目放入一个解决方案。请接受解决方案的默认名称,该名称与项目的名称相同。
您可以接受默认位置、键入一个不同的位置或者浏览到要保存项目的目录。
按“确定”启动“Win32 应用程序向导”。
在“Win32 应用程序向导”对话框的“概述”页中,单击“下一步”。
在“应用程序类型”下的“应用程序设置”页,选择“控制台应用程序”。选择“其他选项”下的“空项目”设置并单击“完成”。
现在,您得到了一个没有源代码文件的项目。
使用解决方案资源管理器
通过解决方案资源管理器,您可以轻松使用解决方案中的文件和其他资源。
在本步骤中,您要向项目添加一个类,Visual Studio 会将 .h 和 .cpp 文件添加到项目中。然后,为测试类的主程序向项目添加一个新的源代码文件。
向项目添加类
如果“解决方案资源管理器”窗口不可见,请单击“视图”菜单上的“解决方案资源管理器”。
右击“解决方案资源管理器”中的“头文件”文件夹并指向“添加”。然后单击“类”。
在“Visual C++”类别中,单击“Visual Studio 已安装的模板”区域中的“C++”,然后单击“C++ 类”。单击“添加”。
在“一般 C++ 类向导”中,键入“Cardgame”作为“类名”,并接受默认的文件名,然后单击和设置。然后单击“完成”。
对编辑区域中显示的 Cardgame.h 文件进行下列更改:
在类定义的左大括号之后添加两个私有数据成员:
复制代码
int players;
static int totalparticipants;
添加一个采用一个 int 类型的参数的公共构造函数原型:
复制代码
Cardgame(int p);
删除为您生成的默认构造函数。默认构造函数是没有参数的构造函数。默认构造函数类似于如下所示:
复制代码
Cardgame(void);
进行上述更改后,Cardgame.h 文件应如下所示:
复制代码
#pragma once
class Cardgame
{
int players;
static int totalparticipants;
public:
Cardgame(int p);
~Cardgame(void);
};
#pragma once 行指明编译器只包含该文件一次。有关更多信息,请参见 once。
有关此头文件中包含的其他 C++ 关键字的信息,请参见 class (C++)、int、Static (C++) 和 public (C++)。
双击“源文件”文件夹中的“Cardgame.cpp”,以将其打开进行编辑。
为采用一个 int 参数的构造函数添加代码:
复制代码
Cardgame::Cardgame(int p)
{
players = p;
totalparticipants += p;
cout << p << " players have started a new game. There are now "
<< totalparticipants << " players in total." << endl;
}
开始键入 pl 或 to 时,可以按 Ctrl-空格键,自动完成功能将为您完成键入 players 或 totalparticipants。
删除自动生成的默认构造函数:
复制代码
Cardgame::Cardgame(void);
进行上述更改后,Cardgame.cpp 文件应如下所示:
复制代码
#include "Cardgame.h"
#include <iostream>
using namespace std;
Cardgame::Cardgame(int p)
{
players = p;
totalparticipants += p;
cout << p << " players have started a new game. There are now "
<< totalparticipants << " players in total." << endl;
}
Cardgame::~Cardgame(void)
{
}
有关 #include 的说明,请参见 The #include Directive。
添加源文件
在本步骤中,您将为测试类的主程序添加一个源代码文件。
添加新源文件
在“项目”菜单上,单击“添加新项”。
也可以使用“解决方案资源管理器”来向项目添加新文件,方法是右击“解决方案资源管理器”中的“源文件”文件夹,指向“添加”。然后单击“新建项”。
在“Visual C++”区域中,选择“代码”。然后单击“C++ 文件(.cpp)”。
键入“testgames”作为“名称”,然后单击“添加”。
在 testgames.cpp 编辑窗口中,键入以下代码:
复制代码
#include "Cardgame.h"
int Cardgame::totalparticipants = 0;
int main()
{
Cardgame *bridge = 0;
Cardgame *blackjack = 0;
Cardgame *solitaire = 0;
Cardgame *poker = 0;
bridge = new Cardgame(4);
blackjack = new Cardgame(8);
solitaire = new Cardgame(1);
delete blackjack;
delete bridge;
poker = new Cardgame(5);
delete solitaire;
delete poker;
return 0;
}
有关此源文件中包含的 C++ 关键字的信息,请参见new Operator (C++) 和 delete Operator (C++)。
在“生成”菜单上,单击“生成解决方案”。
在“输出”窗口中,您应当看到生成的输出,它指示已编译项目,并且未发生错误。如果未看到,请将您的代码与该主题较早显示的代码进行比较
在本步骤中,您将故意在代码中引入一个 Visual C++ 语法错误,以了解什么是编译错误,以及如何修复它。编译项目时,会显示错误消息以指示所发生的问题的性质和位置。
先决条件
本主题假定您具备 C++ 语言的基础知识。
使用 IDE 修复编译错误
在 testgames.cpp 中,删除最后一行中的分号,使代码如下所示:
复制代码
return 0
在“生成”菜单上,单击“生成解决方案”。
“输出”窗口中显示一条消息,指示生成项目失败。
单击“输出”窗口中的“转到下一条消息”按钮(指向右方的绿色箭头)。“输出”窗口中的错误消息和状态栏区域指示右大括号前缺少一个分号。
若要查看有关错误的更多帮助信息,请突出显示错误,并按 F1 键。
将分号重新添加到导致语法错误的行的末尾:
复制代码
return 0;
在“生成”菜单上,单击“生成解决方案”。
“输出”窗口中显示一条消息,指示项目已正确编译。
以“调试”模式运行程序使您可以使用断点来暂停程序,以检查变量和对象的状态。
在本步骤中,您将在程序运行时观察变量的值,并推断为什么值与预期的不同。
先决条件
本主题假定您具备 C++ 语言的基础知识。
以“调试”模式运行程序
如果“testgames.cpp”文件不可见,请在编辑区域中单击该文件对应的选项卡。
单击以下行,将其设置为编辑器中的当前行:
复制代码
solitaire = new Cardgame(1);
若要在该行上设置断点,请单击“调试”菜单上的“切换断点”,或者按 F9。也可以单击代码行左侧的区域来设置或清除断点。
设置了断点的代码行的左侧会显示一个红色圆圈。
在“调试”菜单上单击“开始调试”,或者按 F5。
当程序运行到包含断点的行时,执行将暂时停止(因为程序处于“中断”模式)。代码行左侧的黄色箭头指示该行是要执行的下一个代码行。
若要检查 totalparticipants 变量的值,请将鼠标指针悬停在该变量上方。该变量的名称及其值 12 即显示在工具提示窗口中。
右击 totalparticipants 变量并单击“添加监视”,以在“监视”窗口中显示该变量。您也可以选择该变量并将其拖动到“监视”窗口。
在“调试”菜单上,单击“逐过程”,或者按 F10 步进到下一行代码。
totalparticipants 的值现在显示为 13。
右击 main 方法的最后一行 (return 0;),并单击“运行到光标处”。代码左侧的黄色箭头指向要执行的下一个语句。
当 Cardgame 终止时,totalparticipants 数应减小。此时,totalparticipants 应等于 0,这是因为所有的 Cardgame 指针都已删除,但是“监视 1”窗口指示 totalparticipants 等于 18。
代码中存在一个 bug,您将在下一节中检测并修复它。
在“调试”菜单上,单击“停止调试”或者按 Shift-F5 停止程序。
在本步骤中,您将修改程序以修复在测试项目时发现的问题。
先决条件
本主题假定您具备 C++ 语言的基础知识。
修复包含 bug 的程序
若要明白在 Cardgame 对象销毁时会发生什么,请查看 Cardgame 类的析构函数。
在“视图”菜单上,单击“类视图”,或者单击“解决方案资源管理器”窗口中的“类视图”选项卡。
展开“game”项目树并单击“Cardgame”类。
下方的区域显示类的成员和方法。
右击“~Cardgame(void)”析构函数并单击“转到定义”。
要在 Cardgame 终止时减少 totalparticipants ,请在 Cardgame::~Cardgame 析构函数的左大括号和右大括号之间键入以下代码:
复制代码
totalparticipants -= players;
cout << p << " players have started a new game. There are now "
<< totalparticipants << " players in total." << endl;
进行上述更改后,Cardgame.cpp 文件应如下所示:
复制代码
#include "Cardgame.h"
#include <iostream>
using namespace std;
Cardgame::Cardgame(int p)
{
players = p;
totalparticipants += p;
cout << p << " players have started a new game. There are now "
<< totalparticipants << " players in total." << endl;
}
Cardgame::~Cardgame(void)
{
totalparticipants -= players;
cout << players << " players have finished their game. There are now "
<< totalparticipants << " players in total." << endl;
}
在“生成”菜单上,单击“生成解决方案”。
在“调试”菜单上,单击“运行”,或按 F5,以“调试”模式运行该程序。程序将在第一个断点处暂停。
在“调试”菜单上单击“逐过程”或者按 F10 逐句通过程序。
请注意,执行每个 Cardgame 构造函数后,totalparticipants 的值会增大。而在删除每个指针(并调用析构函数)后,totalparticipants 的值会减小。
单步执行至程序的最后一行。恰好在执行 return 语句之前,totalparticipants 等于 0。继续逐句通过程序,直到程序退出;或者,在“调试”菜单上单击“运行”或按 F5,允许程序继续运行,直到退出。
现在,我们创建了应用程序,最后一步是创建可供其他用户在其计算机上安装该程序的安装程序。为此,我们需要将新项目添加到现有解决方案。此新项目的输出是 setup.exe 文件,该文件用于安装我们之前在另一台计算机上创建的应用程序。
本演练将使用 Windows Installer 来部署应用程序。您还可以使用 ClickOnce 部署应用程序。有关更多信息,请参见 ClickOnce 部署。有关常规部署的更多信息,请参见部署应用程序和组件。
先决条件
本主题假定您具备 C++ 语言的基础知识。
创建安装项目和安装程序
在“文件”菜单上单击“添加”,再单击“新建项目...”。
随即出现“添加新项目”对话框。
从“项目类型:”窗格中,展开“其他项目类型”节点并选择“安装和部署”。
从“模板”窗格中,选择“安装向导”。为安装项目键入名称(如 gameInstaller),并单击“确定”按钮。
将出现“安装向导”。单击“下一步”继续。
从向导的“选择一种项目类型”窗格中,选择“为 Windows 应用程序创建一个安装程序”选项,并单击“下一步”继续。
从向导的“选择要包括的项目输出”窗格,选择“游戏的主输出”,并单击“下一步”继续。
无需在安装程序中包括任何其他文件,因此,从安装程序的“选择要包括的文件”窗格中,单击“下一步”。
检查向导的更改,并验证所有内容是否正确。单击“完成”创建项目。
“解决方案资源管理器”中将列出新的 gameInstaller 项目。此项目将列出应用程序依靠的依赖项(如 C 运行时库或 .NET Framework)以及安装程序中将包括的项目文件。
创建安装项目后,有许多选项可以更改。有关更多信息,请参见 Windows Installer 部署。
通过在“解决方案资源管理器”中选择安装程序并从“生成”菜单单击“生成 gameInstaller”来生成安装程序。
找到上一节创建的 setup.exe 和 gameInstaller.msi 程序。在计算机上双击任一文件安装应用程序。
我们已经学习了 Visual Studio IDE,现在可以开始使用 Visual C++ 编写程序了。我们将学习创建的第一个应用程序类型是命令行应用程序。命令行应用程序不包含图形用户界面 (GUI)。通常,命令行应用程序从控制台读取输入,并将输出写入该控制台,而不是写入图形窗口。
在本节中,您将学习如何创建 C 和 C++ 命令行应用程序。还将学习如何创建不使用 Microsoft 扩展的标准 C 和 C++ 程序。如果您希望使用 Visual C++ 创建在其他操作系统上使用的应用程序,这将很有用。
参考资料:创建命令行应用程序帮助
本回答被提问者采纳