0
点赞
收藏
分享

微信扫一扫

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

以沫的窝 2023-10-19 阅读 15

 🔥博客主页:小王又困了

📚系列专栏:C++

🌟人之为学,不日近则日退

❤️感谢大家点赞👍收藏⭐评论✍️


目录

一、C++的认识

📒1.1什么是C++

📒1.2C++的发展

二、C++关键字

三、命名空间

📒3.1为什么有命名空间

📒3.2命名空间定义

📒3.3命名空间使用

📒3.4命名空间的嵌套

📒3.5std命名空间的使用

四、C++的输入和输出

五、缺省参数

📒5.1缺省参数的定义

📒5.2 缺省参数分类

📒5.3缺省参数出现的位置


🗒️前言:

一、C++的认识

📒1.1什么是C++

        C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机 界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。 1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

📒1.2C++的发展

       1979年,贝尔实验室的本贾尼等人试图分析 unix 内核的时候,试图将内核模块化,于是在C 语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

C++的历史版本:

二、C++关键字

 C++一共有63个关键字,其中有32个是C语言中的关键字

三、命名空间

📒3.1为什么有命名空间

     在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染。

     命名空间分割了全局命名空间,其中每一个命名空间是一个作用域。域是一种空间概念,常见的域有:局部域、全局域、类域、命名空间域,域会影响访问和生命周期。

📒3.2命名空间定义

     命名空间的定义由两部分构成:首先是关键字namespace,后面跟命名空间的名字,然后接一对花括号,花括号中即为命名空间的成员。 命名空间中可以定义变量、函数、类型和其他命名空间。

namespace N1//命名空间的名字
{
    //定义变量
    int rand = 10;

    //定义函数
    int Add(int left, int right)
    {
        return left + right;
    }

    //定义类型
    struct Node
    {
        struct Node* next;
        int val;
    };

    //嵌套命名空间
    namespace N2
    {
        int Sub(int left, int right)
        {
            return left - right;
        }
    }
}

注意:

  • 一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
  • 用一个工程中允许出现多个相同名称的命名空间,编译器最后会将它们合并为一个命名空间。 

📒3.3命名空间使用

命名空间的使用有三种方式:

 注意:

如果命名空间没有展开,编译器默认是不会搜索命名空间中的变量,去访问变量是访问不到的。

访问的优先级:局部域 > 全局域

📒3.4命名空间的嵌套

      嵌套的命名空间同时是一个嵌套的作用域,它嵌套在外层命名空间的作用域中。嵌套的命名空间中的名字遵循的规则与往常类似:内层命名空间声明的名字将隐藏外层命名空间声明的同名成员。在嵌套的命名空间中定义的名字只在内层命名空间中有效,外层命名空间的代码想要访问它必须在名字前添加限定符。

namespace N
{
    int a = 10;

    namespace N1
    {
        int a = 20;    //将外层作用域的a隐藏了
        int b = 15;

    namespace N2
    {
        int c = N1::b;
    }
}

int main()
{
    printf("%d\n", N::N2::c);
    printf("%d\n", N::N1::a);
    printf("%d\n", N::a);
    return 0;
}

📒3.5std命名空间的使用

std是C++标准库的命名空间,如何展开std使用更合理呢?

  1. 在日常练习中,建议直接using namespace std;即可,这样就很方便。
  2.  using namespace std;展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型、对象、函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模 大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间例如: using std::cout展开常用的库对象、类型等方式。 

四、C++的输入和输出

#include <iostream>
using namespace std;

int main()
{
	int a = 10;
	double b = 10.5;
	cout << a << endl;
	cout << b << endl;
	return 0;
}

我们在项目中要经常使用 coutendl,每次指定命名空间很不方便,直接展开会全部暴露,有冲突风险,我们可以指定展开来解决问题。

using std::cout;
using std::endl;

五、缺省参数

📒5.1缺省参数的定义

     缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

void Func(int a = 5)
{
    cout << a << endl;
}

int main()
{
    Func();     // 没有传参时,使用参数的默认值
    Func(10);   // 传参时,使用指定的实参
    return 0;
}

上面代码在第一次调用 Func() 时,没有传递参数,a 就使用了缺省值。

📒5.2 缺省参数分类

注意:

  1. 缺省参数不能在函数声明和定义中同时出现,只能出现在函数声明中。
  2. 缺省值必须是常量或者全局变量。

📒5.3缺省参数出现的位置

      缺省参数只能出现在函数声明中,如下面的代码,在声明和定义中都给了缺省参数,而且给定的值不相同,就不知道以哪个值为准。

//a.h
void Func(int a = 10);

  
//a.cpp
void Func(int a = 20)
{}

      不能只在声明处给缺省参数,如下面的代码,如果只在声明处给缺省参数,在其他的文件中没有缺省参数,就不知是什么值。

//a.cpp
void Func(int a = 10)
{}
  
//b.cpp
void Func(int a)
{}
举报
0 条评论