C++ 入门二:C++ 编程预备知识
一、使用 Qt Creator 创建 C++ 工程
1.1 打开软件
在计算机中找到 Qt Creator 的应用程序图标并双击打开它。如果是首次打开,可能需要进行一些初始化设置,如选择默认的开发环境等。
1.2 选择 C++ 工程
- 打开 Qt Creator 后,在欢迎界面中点击 “New Project”(新建项目)选项。
- 在弹出的 “New Project” 对话框中,选择 “Non-Qt Project”(非 Qt 项目)类别。
- 从右侧的项目模板列表中,选择 “Plain C++ Application”(纯 C++ 应用程序),然后点击 “Choose...” 按钮。
1.3 保存工程
- 在接下来的对话框中,设置项目的名称和保存路径。项目名称应简洁且具有描述性,保存路径可以根据个人习惯选择。
- 点击 “Next” 按钮继续。
1.4 选择编译器
- 在 “Kit Selection”(工具包选择)页面,选择合适的编译器。常见的编译器有 GCC、Clang 等。根据自己的系统环境和需求进行选择。
- 确认所选编译器后,点击 “Next” 按钮。
1.5 完成工程创建
- 检查项目的配置信息,确保所有设置都正确无误。
- 点击 “Finish” 按钮,Qt Creator 将自动创建 C++ 工程。
1.6 运行
- 创建好工程后,在 Qt Creator 的主界面中,可以看到项目的源文件。
- 按下组合键 “Ctrl + R”,或者点击工具栏上的绿色三角形 “Run” 按钮,程序将被编译并运行。
二、命名空间
命名空间(namespace)是 C++ 中用于解决命名冲突的一种机制。在大型项目中,不同的库或模块可能会使用相同的名称,使用命名空间可以将这些名称隔离,避免冲突。
示例代码
cpp
#include <iostream>
// 定义一个命名空间
namespace MyNamespace {
int value = 10;
void printValue() {
std::cout << "MyNamespace 中的值: " << value << std::endl;
}
}
int main() {
// 使用命名空间中的变量和函数
MyNamespace::printValue();
return 0;
}
在上述代码中,MyNamespace
是一个自定义的命名空间,其中包含一个变量 value
和一个函数 printValue
。在 main
函数中,通过 MyNamespace::
作用域解析运算符来访问命名空间中的成员。
三、范围解析运算符
范围解析运算符 ::
用于指定要访问的命名空间、类或结构体的成员。它可以帮助编译器明确要使用的名称所在的作用域。
示例代码
cpp
#include <iostream>
int value = 20;
namespace MyNamespace {
int value = 10;
void printValue() {
std::cout << "MyNamespace 中的值: " << value << std::endl;
}
}
int main() {
// 访问全局变量
std::cout << "全局变量的值: " << ::value << std::endl;
// 访问命名空间中的变量和函数
MyNamespace::printValue();
std::cout << "MyNamespace 中的值: " << MyNamespace::value << std::endl;
return 0;
}
在这个例子中,::value
表示访问全局作用域中的 value
变量,而 MyNamespace::value
表示访问 MyNamespace
命名空间中的 value
变量。
四、输入输出
4.1 cout
与 printf
cout
:cout
是 C++ 标准库中的输出流对象,用于向标准输出设备(通常是控制台)输出数据。它可以自动判断输出数据的类型,使用起来更加方便。printf
:printf
是 C 语言中的标准输出函数,需要手动指定输出格式。
示例代码
cpp
#include <iostream>
#include <cstdio>
int main() {
int num = 10;
double d = 3.14;
// 使用 cout 输出
std::cout << "整数: " << num << ", 浮点数: " << d << std::endl;
// 使用 printf 输出
printf("整数: %d, 浮点数: %f\n", num, d);
return 0;
}
4.2 cin
与 scanf
cin
:cin
是 C++ 标准库中的输入流对象,用于从标准输入设备(通常是键盘)读取数据。它可以自动判断输入数据的类型。scanf
:scanf
是 C 语言中的标准输入函数,需要手动指定输入格式。
示例代码
cpp
#include <iostream>
#include <cstdio>
int main() {
int num;
double d;
// 使用 cin 输入
std::cout << "请输入一个整数和一个浮点数: ";
std::cin >> num >> d;
std::cout << "你输入的整数是: " << num << ", 浮点数是: " << d << std::endl;
// 使用 scanf 输入
printf("请再次输入一个整数和一个浮点数: ");
scanf("%d %lf", &num, &d);
printf("你输入的整数是: %d, 浮点数是: %f\n", num, d);
return 0;
}
五、作用域
作用域(scope)决定了变量、函数等标识符的可见性和生命周期。C++ 中有多种作用域,包括全局作用域、局部作用域、命名空间作用域和类作用域等。
示例代码
cpp
#include <iostream>
// 全局变量,具有全局作用域
int globalVar = 10;
void func() {
// 局部变量,具有局部作用域
int localVar = 20;
std::cout << "局部变量: " << localVar << std::endl;
std::cout << "全局变量: " << globalVar << std::endl;
}
int main() {
func();
std::cout << "全局变量: " << globalVar << std::endl;
// 无法访问 func 函数中的 localVar
// std::cout << "局部变量: " << localVar << std::endl;
return 0;
}
在上述代码中,globalVar
是全局变量,在整个程序中都可以访问;localVar
是局部变量,只能在 func
函数内部访问。
六、动态内存
6.1 C 语言方式
在 C 语言中,使用 malloc
函数来分配动态内存,使用 free
函数来释放内存。
示例代码
c
#include <stdio.h>
#include <stdlib.h>
int main() {
// 分配内存
int* ptr = (int*)malloc(sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
// 使用内存
*ptr = 10;
printf("分配的内存中的值: %d\n", *ptr);
// 释放内存
free(ptr);
return 0;
}
6.2 C++ 方式
在 C++ 中,使用 new
运算符来分配动态内存,使用 delete
运算符来释放内存。
示例代码
cpp
#include <iostream>
int main() {
// 分配内存
int* ptr = new int;
// 使用内存
*ptr = 20;
std::cout << "分配的内存中的值: " << *ptr << std::endl;
// 释放内存
delete ptr;
return 0;
}
new
运算符还可以用于分配数组:
cpp
#include <iostream>
int main() {
// 分配数组内存
int* arr = new int[5];
for (int i = 0; i < 5; ++i) {
arr[i] = i;
}
// 输出数组元素
for (int i = 0; i < 5; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
// 释放数组内存
delete[] arr;
return 0;
}
七、引用
引用(reference)是变量的别名,它提供了一种更简洁、安全的方式来操作变量。引用在定义时必须初始化,并且一旦初始化后,就不能再引用其他变量。
示例代码
cpp
#include <iostream>
int main() {
int num = 10;
// 定义引用
int& ref = num;
// 修改引用的值,即修改原变量的值
ref = 20;
std::cout << "原变量的值: " << num << std::endl;
return 0;
}
引用与指针的区别
引用和指针有一些相似之处,但也存在明显的区别:
- 初始化:引用在定义时必须初始化,而指针可以在定义后再赋值。
- 空值:引用不能为
NULL
,而指针可以指向NULL
。 - 操作:引用使用起来更像变量,直接操作引用就相当于操作原变量;指针需要使用解引用运算符
*
来访问所指向的变量。 - 重新赋值:引用一旦初始化后,就不能再引用其他变量;指针可以随时指向其他变量。
通过以上内容的学习,你已经掌握了使用 Qt Creator 创建 C++ 工程的基本步骤,以及 C++ 中的命名空间、范围解析运算符、输入输出、作用域、动态内存和引用等预备知识,为进一步学习 C++ 编程打下了坚实的基础。