合肥seo网站推广外包,中装建设市值,北京网站建设搜q.479185700,wordpress3.3目录
前言
一、命名空间
1.1 namespace的价值
1.2 namespace的定义
1.3 命名空间的使用
二、C输入输出 前言 C是一种面向对象的计算机程序设计语言#xff0c;它扩展了C语言的功能#xff0c;并引入了面向对象编程的概念#xff0c;如类、继承和多态等输入输出 前言 C是一种面向对象的计算机程序设计语言它扩展了C语言的功能并引入了面向对象编程的概念如类、继承和多态等C是以C语言为基础进行了拓展与创新C兼容C语言绝大多数的语法。 还记得我们在学C语言时的第一个代码程序吗
#includestdio.h
int main()
{printf(hello world\n);return 0;
}C也兼容这种写法但是C有⼀套自己的输入输出严格说C版本的hello world应该是这样写的。
#includeiostream
using namespace std;
int main()
{cout hello world\n endl;return 0;
}现在还不认识不要紧本篇会讲解C的一些基础知识 看完后就明白是怎么一回事了。
一、命名空间
1.1 namespace的价值 c语言项目类似下面程序这样的命名冲突是普遍存在的问题C引入namespace就是为了更好的解决这样的问题。
#include stdio.h
#include stdlib.h
int rand 10;
int main()
{printf(%d\n, rand);return 0;
}这里我们可以看到编译器报错了因为在stdlib头文件中包含一个名为rand的函数与定义的变量rand发生了命名冲突。在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全局作用域中可能会导致很多冲突使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。
1.2 namespace的定义
• 定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接⼀对{}即可{}中即为命名空间的成员命名空间中可以定义变量/函数/类型等。
• namespace本质是定义出⼀个域这个域跟全局域各自独立不同的域可以定义同名变量所以下面的rand不再冲突了。
#include stdio.h
#include stdlib.h
// otto是命名空间的名字
namespace otto
{// 命名空间中可以定义变量/函数/类型 int rand 10;//变量int Add(int left, int right)//函数{return left right;}class otto//类{public:void man(){return;}private:int x;};}
int main()
{printf(%p\n, rand);printf(%d\n, otto::rand);return 0;
}第一个printf默认访问的是全局的rand函数地址第二个printf用到的是otto命名空间里的rand这样就解决了命名冲突的问题。
• C中域有函数局部域全局域命名空间域类域域影响的是编译时语法查找⼀个变量/函数/ 类型声明或定义的逻辑所有有了域隔离命名冲突就解决了局部域和全局域除了会影响 编译查找逻辑还会影响变量的生命周期命名空间域和类域不影响变量生命周期。
• namespace只能定义在全局当然他还可以嵌套定义。
namespace otto
{namespace kun{int rand 1;int Add(int left, int right){return left right;}}
}
int main()
{printf(%d\n, otto::kun::rand);printf(%d\n, otto::kun::Add(1, 2));return 0;
}
• 项目工程中多文件中定义的同名namespace会认为是⼀个namespace不会冲突。
• C标准库都放在⼀个叫std(standard)的命名空间中。
1.3 命名空间的使用 编译查找⼀个变量的声明/定义时默认只会在局部或者全局查找不会到命名空间里面去查找所以下面程序会编译报错
namespace N
{int a 0;int b 1;
}
int main()
{printf(%d\n, a);return 0;
} 所以我们要使用命名空间中定义的变量/函数有三种方式
• 指定命名空间访问项目中推荐这种方式。
int main()
{printf(%d\n, N::a);return 0;
}通过“命名空间::”的方式在指定命名空间访问。
• using将命名空间中某个成员展开项目中经常访问的不存在冲突的成员推荐这种方式。
using N::b;
int main()
{printf(%d\n, N::a);printf(%d\n, b);return 0;
}展开后使用这个变量时就不用带命名空间了。
• 展开命名空间中全部成员项目不推荐冲突风险很大日常小练习程序为了方便推荐使用。
using namespce N;
int main()
{printf(%d\n, a);printf(%d\n, b);return 0;
}二、C输入输出 • iostream是Input Output Stream 的缩写是标准的输入、输出流库定义了标准的输入、输 出对象。
• std::cin是 istream 类的对象它主要面向窄字符的标准输入流。
• std::cout 是 ostream 类的对象它主要⾯向窄字符的标准输出流。
• std::endl 是⼀个函数流插入输出时相当于插入⼀个换行字符加刷新缓冲区。
• 是流插入运算符是流提取运算符。
• 使⽤C输⼊输出更方便不需要像printf/scanf输⼊输出时那样需要手动指定格式C的输入输出可以自动识别变量类型其实最重要的是 C的流能更好的支持自定义类型对象的输入输出。
• IO流涉及类和对象运算符重载、继承等很多面向对象的知识这些知识我们还没有讲解所以这里我们只能简单认识⼀下C IO流的用法后面会有专门的⼀个章节来细节IO流库。
• cout/cin/endl等都属于C标准库C标准库都放在⼀个叫std(standard)的命名空间中所以要 通过命名空间的使用方式去用他们。
• ⼀般日常练习中我们可以using namespace std实际项目开发中不建议使用
• 这里我们没有包含也可以使用printf和scanf在包含间接包含了。vs系列编译器是这样的其他编译器可能会报错。
#include iostream
using namespace std;
int main()
{int a ;double b;char c ;// 可以自动识别变量的类型 cin a;cin b c;cout a endl;cout b c endl;return 0;
} 本篇内容就先到这里了希望对各位有帮助喜欢不要忘记三连蟹蟹。