天行健 发表于 2025-1-20 18:52:40

C++基础知识01.命名空间、基本数据类型及表达式、变量作用域

# C++介绍

C++ 语言是在优化 C 语言的基础上为支持面向对象的程序设计而研制的一个通用目的的程序设计语言。在后来的持续研究中,C++ 增加了许多新概念,例如虚函数、重载、继承、标准模板库、异常处理、命名空间等。

## C++的特点

C++ 语言的特点主要表现在两个方面:<b>全面兼容 C 语言和支持面向对象的方法</b>。

由于 C++ 可以全面兼容 C,这就使得部分由 C 语言编写的代码在未经修改的情况下就可以为 C++ 所用,这极大的促进了 C++ 的普及和面向对象技术的广泛应用。

C++ 最具有意义的一面就是支持面向对象的方法。与 C 兼容的特点虽赋予 C++ 双重特点,但 C 和 C++ 在概念上却是两种完全不同的程序设计语言,所以在 C++ 中应注意按照面向对象的思维去编写代码。

此外,C++ 在保持 C 简洁、高效等特点的基础上,对 C 的类型系统进行改革和扩充,因此 C++ 编译环境能检测出的类型错误更多。

## 命名空间

命名空间里面包含了逻辑结构上相互关联的一组类、函数、模板等。命名空间像是一个容器,把某些在逻辑结构上相关的 “ 对象 ” 放在一起并与外界区分。特别的,命名空间里的变量名或类名可以和命名空间外的变量名或类名重名。

使用命名空间的时候,我们可以用<b>花括号</b>把声明块括起来,再以关键字 <b>namespace</b> 开头并命名,其基本格式如下:

```cpp
namespace Names{
    // 声明块
    int x;
    void funA(){
      //...
    }
}
```

## Hello World

```cpp
#include <iostream> //iostream 表示对流运行读写操作。
using namespace std; //使用标准 C++ 库中的所有成员。

int main(){
    cout << "Hello" << endl; //cout 为标准输出流对象;endl 表示插入换行符,并刷新流。
    return 0;
}
```

完成代码编写并成功保存后,在 Linux 终端输入:

```shell
g++ shiyanlou.cpp -o shiyanlou
```

GCC 和 G++ 是由 GNU 开发的编程语言编译器,其中 GCC 用来编译 C 语言程序;G++ 用来编译 C++ 语言程序。

g++ -o 的功能:生成可执行文件,其基本格式为:

```
g++ 需生成可执行文件的源文件名 -o 可执行文件名称
```

所以输入 `g++ shiyanlou.cpp -o shiyanlou` 命令且回车后,我们可以在代码文件浏览区看到生成的可执行文件 Hello。

如果涉及到多文件编译的话

```bash
# g++ 编译 cpp 文件
g++main.cpp swap.cpp -o main
```

在 vscode 里的配置是

```json
{
    "tasks": [
      {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "/home/liujiawei/cpp/swap.cpp",//将需要编译的文件添加到参数中,这样就和上面的命令对应起来了。
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
      }
    ],
    "version": "2.0.0"
}
```

# 基本数据类型及表达式

C++ 的数据类型分为基本数据类型和自定义数据类型,其基本数据类型如下:


| 数据类型名   | 长度(字节) | 取值范围                                                          |
| ---------------- | -------------- | ------------------------------------------------------------------- |
| char         | 1            | -128 ~ 127 或 0 ~ 255                                             |
| bool         | 1            | true, false                                                       |
| signed char    | 1            | -128 ~ 127                                                      |
| unsigned char| 1            | 0 ~ 255                                                         |
| short          | 2            | -32768 ~ 32767                                                    |
| unsigned short | 2            | 0 ~ 65535                                                         |
| int            | 4            | -2147483648 到 2147483647                                       |
| unsigned int   | 4            | 0 ~ 4294967295                                                    |
| long         | 8            | -9223372036854775808 到 9223372036854775807                     |
| unsigned long| 8            | 0 到 18,446,744,073,709,551,615                                 |
| float          | 4            | 3.4E-38 ~ 3.4E+38                                                 |
| double         | 8            | 1.7E-308 ~ 1.7E+308                                             |
| long double    | 16         | 长双精度型 16 个字节(128 位)内存空间,可提供 18-19 位有效数字。 |

各种类型的存储大小和具体操作系统的位数有关,目前大部分系统为 64 位,与上表基本一致。

由上表可知,C++ 的基本数据类型一般包括:bool、char、int、float 和 double。其中关键字 signed、unsigned、short、long 被称为修饰符。特别的,当用 short 或 long 修饰 int 时,int 可省略不写,表示短整型数据或长整型数据。

## string类

string 是 C++ 标准库的一个重要部分,主要用于字符串的处理,string 类的头文件为:`#include<string>`。使用 string 可以对字符串的对象执行某些操作,例如拼接、查找等。

## struct

struct 是由一系列相同或不同的数据类型组成的数据集合,也称结构体,是一种复合型的数据类型。

```cpp
struct struct_name{
    memberList
}varList
```

其中 `struct` 为结构体的关键字,`struct_name` 为结构体的名字,`memberList` 为结构体成员变量及成员函数的列表,`varList` 为结构体声明的变量。使用 `varList.元素名` 可调用结构体中的元素。

```cpp
#include<iostream>
using namespace std;

struct demo{
    int a;
    string info(){
      return a+"123";
    }
}d;

int main(){
    cout<<"before:"<< d.info()<<endl;
    d.a = 10;
    cout<<d.a<<endl;
}
```

```shell
xx:project/ $ g++ stru.cpp -o stru
xx:project/ $ ./stru
before:123
10
xx:project/ $   
```

## 变量作用域

局部变量、全局变量和 Java 类似,不赘述。

## 常量

常量声明一般有两种方式,一是使用 `#define` 预处理、二是使用 `const` 关键字。

1️⃣使用 `#define` 预处理

格式:#define name value

```c++
#define PI 3.14159
#define NEWLINE '\n'
```

2️⃣使用 `const` 关键字

格式:const type name = value

```c++
const double pi = 3.14;
const char tab = '\t';
```
页: [1]
查看完整版本: C++基础知识01.命名空间、基本数据类型及表达式、变量作用域