- 什么是c++
- c++发展史
- C++98
- C++11
- 一、命名空间
- 1.命名空间是什么
- 2.命名空间定义方式
- 1.普通
- 2.嵌套
- 3.同名
- 3.命名空间的使用1.0
- 3.命名空间的使用2.0
- 3.命名空间的使用3.0
C语言是结构化和模块化语言,适合规模较小的程序,为了解决复杂的,规模较大的程序,20世纪80年代,计算机界提出了OOP(object oriented programming:面向对象)思想,C++之父Bjarne Stroustrup在C语言的基础上引入并扩充了面向对象的概念,命名为C++
C++既可以以抽象数据类型为特点的基于对象的程序设计,又可以进行面向对象的程序设计
c++发展史C++98
- 在C++的发展过程中,是一步步完善,逐步递增,由浅入深,其中发展史种C++98和C++11是较为重要的两个版本
C++11这是C++标准第一版本,绝大多数的编译器都支持,得到了国际化标准组织(ISO)和美国标准化协会的认可,以模板的方式重写C++库,引入了STL
在C++11中 增加了许多特性,使得C++更像一种新语言,例如:正则表达式,auto关键字,新容器等等
懶懶懶以下是正式学习C++的语法啦,从命名空间开始懶懶懶
一、命名空间 1.命名空间是什么2.命名空间定义方式在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都会存在于全局变量作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这个问题
1.普通
- 首先命名空间的定义方式是namespace+ 命名空间的名字+ {}
- 在命名空间中,既可以定义变量,又可以定义函数
- 一个命名空间就定义了一个新的作用域,命名空间中所有的内容都局限于该命名空间中,所以命名空间内,全局变量,主函数内部,都可以定义相同的变量名,因为作用域不同,所以不会产生冲突
- 在同一个工程中允许存在多个相同名称的命名空间,这样也不会发生冲突,因为编译器会将多个相同名称的命名空间合并成一个
- 以下是三种定义方式
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; }
❤❤❤**感谢大家的观看,期待你的一键三连哦~**❤❤❤
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)