【C++】第一话——初识C++

【C++】第一话——初识C++,第1张

【C++】第一话——初识C++

文章目录
    • 什么是c++
    • c++发展史
        • C++98
        • C++11
      • 一、命名空间
        • 1.命名空间是什么
        • 2.命名空间定义方式
          • 1.普通
          • 2.嵌套
          • 3.同名
        • 3.命名空间的使用1.0
        • 3.命名空间的使用2.0
        • 3.命名空间的使用3.0

什么是c++

C语言是结构化和模块化语言,适合规模较小的程序,为了解决复杂的,规模较大的程序,20世纪80年代,计算机界提出了OOP(object oriented programming:面向对象)思想,C++之父Bjarne Stroustrup在C语言的基础上引入并扩充了面向对象的概念,命名为C++

C++既可以以抽象数据类型为特点的基于对象的程序设计,又可以进行面向对象的程序设计

c++发展史
  • 在C++的发展过程中,是一步步完善,逐步递增,由浅入深,其中发展史种C++98和C++11是较为重要的两个版本
C++98

这是C++标准第一版本,绝大多数的编译器都支持,得到了国际化标准组织(ISO)和美国标准化协会的认可,以模板的方式重写C++库,引入了STL

C++11

在C++11中 增加了许多特性,使得C++更像一种新语言,例如:正则表达式,auto关键字,新容器等等

懶懶懶以下是正式学习C++的语法啦,从命名空间开始懶懶懶

一、命名空间 1.命名空间是什么

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

2.命名空间定义方式
  • 首先命名空间的定义方式是namespace+ 命名空间的名字+ {}
  • 在命名空间中,既可以定义变量,又可以定义函数
  • 一个命名空间就定义了一个新的作用域,命名空间中所有的内容都局限于该命名空间中,所以命名空间内,全局变量,主函数内部,都可以定义相同的变量名,因为作用域不同,所以不会产生冲突
  • 在同一个工程中允许存在多个相同名称的命名空间,这样也不会发生冲突,因为编译器会将多个相同名称的命名空间合并成一个
  • 以下是三种定义方式
1.普通
namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
2.嵌套
namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
    //类似一个学校可以有多个学院
    //::是作用域运算符
    namespace L1
{
    int MUL(int left, int right)
    {
        return left * right;
    }
}
}
3.同名
namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
namespace L
{
    int MUL(int left, int right)
    {
        return left * right;
    }
}
3.命名空间的使用1.0
  • 命名空间的名字::成员
  • 这种是最简单,最常用,发生冲突概率最小的方法,缺点就是不太方便
namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
int a = 20;
int main()
{
    int a = 30;
    printf("%d", a);//此时输出的是主函数里的a的值,30,采用就近原则
    return 0;
}
namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
int a = 20;
int main()
{
    //::被称为作用域运算符,::前面没有名字,代表不是使用命名空间,使用的是全局变量
    int a = 30;
    printf("%d", :: a);//此时输出的全局变量a的值,20,
    return 0;
}

namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
int a = 20;
int main()
{
    //命名空间的使用方式:
    //命名空间名字:: 成员
    int a = 30;
    printf("%d", a);//输出的是命名空间L里a的值,10
    return 0;
}
3.命名空间的使用2.0
  • 情景1:假如对命名空间中的某些成员访问的非常频繁

  • using L :: a;使用这种方法,可是实现在主函数中直接printf("%d",a);的使用

  • 虽然写代码简单了,但是如果该文件中也有一个a,则会产生冲突,只能按照1.0的方法进行使用

namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
using L :: a;

int main()
{
    printf("%d", a);
    return 0;
}

小心以下这种情况,会造成对a的访问冲突

namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
using L :: a;
int a = 20;
int main()
{
    printf("%d", a);//这种情况会报错,冲突了,解决办法是用1.0访问
    return 0;
}
3.命名空间的使用3.0
  • 情景2:命名空间中许多成员在当前文件访问的都很频繁

比较麻烦的方法

namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
using L :: a;//当想使用命名空间的成员比较多且比较频繁,这样会显得很麻烦
using L :: b;
using L :: Add;
int main()
{
    printf("%d", a);
    printf("%d", b);
    return 0;
}

有没有既可以简化的方式访问,又不用使用using 呢?
有!

  • using namespace 命名空间的名字
  • 它更加方便,但是发生冲突的可能性也更大
  • 如果冲突,使用1.0 版本
namespace L
{
    int a = 10;
    int b = 20;
    int Add(int left, int right)
    {
        return left + right;
    }
}
//将当前L的命名空间中所有的成员当成该文件的全局变量
//使用非常简单
//产生概率比较大,如果冲突,使用1.0
using namespace L;
int main()
{
    printf("%d", a);
    printf("%d", b);
    return 0;
}

❤❤❤**感谢大家的观看,期待你的一键三连哦~**❤❤❤

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5691271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存