C++基础

发布时间:2024年01月13日

C++基础

C 和 C+ 之间的关系是紧密且复杂的。最初是作为 C 语言的一个扩展开发的,目的是在不放弃 C 的强大功能和效率的同时,增加对象导向编程,泛型编程和其他一些特性。下面是 C 和 C++ 之间主要的关系和区别:

  1. 兼容性:C++在很大程度上是与 C 兼容,这意着许多 C 程序可以在 C++ 编译器中编译并运行,尽管可能需要一些小的修改。
  2. 面向对象编程(OOP):C++引入了面向对象编程。它允许使用类和对象,而是 C 一个过程性语言,不支持这些概念,或者说支持的不好,麻烦。
  3. 模板:C++ 支持模板,这是一种允许程序员编写与数据类型无关的代码的功能。C 没有这个功能。
  4. 标准库:C++ 有一个更丰富的标准库,包括STL(标准模板库),这为数结构和算法提供了广泛的支持。而C的标准库相对较小。
  5. 类型检查:C++ 比 C 提供更严格的类型检查,这意味着某些在C 中可行但可能导致错误的代码在C++中可能无法编译。
  6. 异常处理:C++ 支持异常处理,这是一种处理程序运行时错误的机制。C 没有内置的异常处理机制。
  7. 命名空间:C++ 引入了命名空间,这有助于防止名称冲突。C 没有这个概念。

命名空间

命名空间的作用

创建自己的命名空间是C++中组织代码的一种好方法,特别是在开发大型项目或库时,命名空间可以帮助你避免名称中突,并且清晰的组织代码,std 是C++ 标准库的命名空间。它是一个定义在 C++ 标准库中的所有类、函数和变量的命名空间。

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

在 C++ 中,如果你想使用标准库中的任何类、函数或对象,通常有两种选择:

  1. 使用 std::前缀:这是最常见的方式,它明确指定了你正在使用的是位于std 命名空间中的元素。

    std::cout << "Hello world!" << std::endl;
    
  2. 使用 using namespace std;:这允许你在不显示指定 std:: 的况下使用 std 命名空间中的所有元素。

    using namespace std;
    cout << "Hello world!" << endl;
    

std 包含的内容

std 命名空间包含许多类、函数和对象,例如:

  1. 输入输出库(eg:std::cout,std::cin,std::endl)
  2. 容器类(eg:std::vector,std::map,std::set)
  3. 字符串类(std::string)
  4. 异常类(std::exception 和相关子类)
  5. 算法(eg:std::sort,std::find)
  6. 实用工具(eg:std::pair,std::tuple)
  7. 其他

使用建议:

  1. 对于小型代码或示例代码,使用 using namespace std; 通常是安全的。
  2. 对于大型项目或库,建议显式的使用 std:: 前缀,以避免潜在的名称冲突,并提高代码的可读性和可维护性。

自定义命名空间

定义命名空间

要求:创建一个命名空间来包含与圆形相关的功能,可以命名这个命名空间为Cir:

#ifndef CIR_H
#define CIR_H
namespace cir{
    const double PI = 3.141592653;
    double areaOfCircle(double radius){
        return PI*radius*radius;
    }
    double lengthOfCircle(double radius){
        return 2*PI*radius;
    }
}

#endif  // CIR_H

// 使用方法
// 在main.cpp中首先包含定义cirde 命名空间的头文件。然后可以使用cir::前缀来访问命名空间中的函数和常量,通过使用自定义命名空间可以有效的组织代码减少不同库之间的名称冲突。
#include <iostream>
#include <stdio.h>
#include "cir.h"

using namespace std;
using namespace cir;


int main()
{
    double myRadius = 5;
    cout << "namespace" << endl;
 // 使用两种表达方式   		          printf("length:%lf,area:%lf\n",cir::getLengthOfCircle(myRadius),cir::getAreaOfCircle(myRadius));
    printf("length:%lf,area:%lf\n",getLengthOfCircle(myRadius),getAreaOfCircle(myRadius));

    return 0;
}

从C语言快速入门

输入输出

C++ 中的输入和输出(I/O)主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 库,它及供了用于输入和输出的基本流类,包活cin、cout、cerr和c1og。

标准输出流(cout)

  • cout 代表标准输出流,通常用于向屏幕输出数据。
  • 使用操作符<<(插入提作符)向 cout 发送数据
  • 例如,std::cout <<“He11o, wor1d!” << std::endl;会在用而上打印"Hello,world!"并换行。

标准输入流(cin)

  • cin代表标准输入流,用于从键盘接收数据。
  • 使用提作符>>(提取操作符)从 cin 提取数据。
  • 例如,int x;std::cin >> x;会从用户那里读取一个整数并存储在变量x中。

标准错误流(cerr)和标准日志流(c1og)

  • cerr用于输出错误消息,与 cout 不,cerr 不是缓冲的,这意味着它会立即输出。
  • c1og 类似于 cerr,但它是缓冲的。通常用于记录错误和日志信息。
// c
#include <stdio.h>

int main()
{
    int a;
    int b;
    scanf("%d,%d", &a, &b);
    printf("a=%d,b=%d\n", a, b);
    printf("%d+%d=%d\n", a, b,a+b);
    return 0;
}
// c++
#include <iostream>

using namespace std;

int main()
{
    int a;
    int b;
    cin >> a >> b;
    cout << a << ","<< b << endl;
    cout << a << "+" << b << "=" << a+b << endl;
    return 0;
}

C++数据类型

数据类型描述大小(通常情况下)用途
int整形至少16位存储整数
short int短整型至少16位存储较小的整数
long int长整型至少32位存储较大的整数
long long int更长的整型至少64位存储非常大的整数
unsigned int无符号整型同int存储非负整数
float单精度浮点类型32位存储小数,精度约为6-7位小数
double双精度浮点类型64位存储小数,精度约为15-16位小数
long double扩展精度浮点类型80位或更多存储小数,提供比double更高的精度
char字符型8位存储单个字符或小整数
unsigned char无符号字符型8位存储较大的字符或作为字节使用
signed char有符号字符型8位明确作为带符号的字符或小整数使用
bool布尔型通常为8位存储真值true或假值false C语言C99以上支持
wchar_t宽字符类型通常为16位或32位存储中文或unicode

宽字符的用法

// 在QT环境下运行会出错,但在Linux g++编译工具下会成功运行
#include <iostream>
#include <locale>
#include <wchar.h>

int main()
{
    // 设置本地化以支持宽字符
    std::setlocale(LC_ALL, "");
    // 使用 wchar_t 类型定义一个宽字符
    wchar_t wstr[] = L"你好,世界!";
    // 在C++中打印宽字符
    std::cout << wstr << std::endl;
    return 0;
}

如何使用

在C++中(或在C中是 <limits.h>)是一个标准头文件,提供了关于整型限制的信息,这个头文件中定义了各种整型数据类型的属性,如最大值、最小值等。使用这些信息可以帮助了解在特定编译器和平台上各种数据类型的大小和范围。

要使用 中定义的常量,需要包含这个头文件 #include

然后,可以使用它提供的各种常量,例如:

  • INT_MAX:int 类型的最大值
  • INT_MIN:int 类型的最小值
  • UINT_MAX:unsigned int 类型的最大值
  • LONG_MAX:1ong int 类型的最大值
  • LONG_MIN:1ong int 类型的最小值
  • LLONG_MAX:long long int 类型的最大值
  • LLONG_MIN:1ong long int 类型的最小值
// 输出 int、unsigned int 和 1ong 1ong int 类型的大值和展小值,
#include <iostream>
#include <climits>
int main()
{
    std::cout << "The range of int is from " << INT_MIN << " to " << INT_MAX << std::endl;
    std::cout << "The maximum value of unsigned int is " << UINT_MAX << std::endl;
    std::cout << "The range of long 1ong is from " << LLONG_MIN << " to " << LLONG_MAX << std::endl;
    return 0;
}

注意事项:

  • 提供的是编译时确定的常量,这意味着这些值在编译时就已经固定了,根据编译器和平台的不同而可能有所不同。
  • 使用这些限制值可以帮助编写更可移植和安全的代码,特别是在处理可能超出数据类型范围的操作时。
文章来源:https://blog.csdn.net/weixin_47642634/article/details/135570822
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。