当前位置: 首页 > news >正文

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

  • coutcout 是 C++ 标准库中的输出流对象,用于向标准输出设备(通常是控制台)输出数据。它可以自动判断输出数据的类型,使用起来更加方便。
  • printfprintf 是 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

  • cincin 是 C++ 标准库中的输入流对象,用于从标准输入设备(通常是键盘)读取数据。它可以自动判断输入数据的类型。
  • scanfscanf 是 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++ 编程打下了坚实的基础。

相关文章:

  • JavaScript中Reflect对象指南:更智能的对象操作
  • BLE 协议栈事件驱动机制详解
  • Codeforces Round 1016 (Div. 3)题解
  • Django软删除功能完整指南:构建图书馆项目
  • 【Docker项目实战】使用Docker部署ToDoList任务管理工具
  • 亮相CMEF,美的医疗全维度打造智慧医疗新生态
  • HTML的Canvas元素
  • 数字的乘阶运算
  • 零碳园区智慧能源解决方案
  • 【算法学习】链表篇:链表的常用技巧和操作总结
  • SvelteKit 最新中文文档教程(19)—— 最佳实践之身份认证
  • 控制 ElementUI el-table 树形表格多选框的显示层级
  • NLP高频面试题(三十七)——大模型训练和推理的显存估计
  • 深入解析原生鸿蒙中的 RN 日志系统:从入门到精通!
  • Go 语言中的select是做什么的
  • 什么是音频预加重与去加重,预加重与去加重的原理是什么,在什么条件下会使用预加重与去加重?
  • 今日踩坑之@Autowired与@Resource区别
  • 解锁ChatGPT-4o文生图潜力:精选提示词收集整理更新中
  • vLLM实战:单机多卡大模型推理部署指南
  • 天元证券|空仓一个月 这批新基金冲进去了!
  • 兰州做网站企业/学习软件的网站
  • 好的做外贸的网站/web网页制作教程
  • 域名服务器ip/网站优化排名提升
  • 云商城在线下单/windows优化大师是电脑自带的吗
  • 电子商务网站开发技术有哪些/竞价托管一般要多少钱
  • 做网站还赚钱吗/腾讯网网站网址