初识C++——命名空间,C++输入&输出

目录

命名空间(namespace):

(1)namespace的定义:

(2)命名空间使用

C++输入&输出:


C++兼容C语言绝大多数的语法,所以C语言实现的hello world依然可以正常运行,C++中需要将定义文件代码的后缀改成.cpp

#include <stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}

但C++有着自己一套的输入输出,严格来讲C++版的hello world应该是这样:

#include<iostream>               
using namespace std;
int main()
{
    cout << "hello world" << endl;       //这里可暂且将这条语句视为和printf效果一致
    return 0;
}

命名空间(namespace):

在C/C++中,变量,函数和C++后面将要学习的类都是大量存在的,而这些变量,函数,和类的名称将都存在全局作用域中,可能会导致很多冲突,比如名字相同之类的。而使用命名空间就是为了针对这一问题所使用的

#include <stdio.h>
#include <stdlib.h>
int rand=10;
int main()
{
    //这里编译器会报错:"rand"重定义,rand以前的定义是一个函数它存在于<stdlib.h>库中
    printf("%d",rand);
    return 0;
}

(1)namespace的定义:

1.定义一个命名空间就要使用到关键字namespace,后面跟上名字,然后接上一对{}即可开出一个命名空间,命名空间中可以定义函数,变量,类型等。

2.namespace的本质在于开出了一片域,这个域和别的域各自独立,你可以开辟好几个不同的域,在域里面可以定义同名对象,所以只要开一个命名空间在里面定义rand变量就不会和函数rand冲突了。

3.C++中有好几种域,有函数局部域,全局域,命名空间域,类域;域的主要影响在于编译时语法查找一个变量/函数/类型的出处,而域在这里就充当了一个墙的作用,它将每个不同的域隔离开。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。

4.namespa只能定义在全局,且可以嵌套定义

5.如果定义了多个同名命名空间,不用担心,它们会被认为是一个命名空间

6.C++标准库都放在一个叫std(standard)的命名空间中

#include <stdio.h>
#include <stdlib.h>
namespace cool
{
	int rand = 10;
	int add(int x, int y)
	{
		return x + y;
	}
}
int main()
{
	cout << rand << endl;              //打印函数rand的地址
	cout << cool::rand << endl;        //访问命名空间cool的rand,打印10
	cout << cool::add(5, 6) << endl;   //访问命名空间cool调用add函数进行加法打印11
	return 0;
}
(2)命名空间使用

在编译期间,编译器默认只查找全局域或者局部域,不会到命名空间里面去查找,所以我们要使用命名空间中定义的变量/函数,有三种方式:

1.指定命名空间访问(命名空间的名字::想访问的变量/函数/类型),项目中推荐这种方式

2.使用using将命名空间中的某个成员展开,如果项目中有常访问的且不会冲突的成员可以使用这种方式

3.使用using将整个命名空间展开,做项目不推荐,但为了日常的练习方便可以直接展开

namespace cool
{
	int rand1 = 10;
	int add(int x, int y)
	{
		return x + y;
	}
}
//展开rand1变量
using cool::rand1;
//展开add函数
using cool::add;
int main()
{
	cout << rand1 << endl;        //可以直接访问了
	cout <<add(5, 6) << endl;
	return 0;
}

C++输入&输出:

这里讲述的是C++标准输入cin和标准输出cout的来历

1.在使用C++是需要包含头文件<iostream>它是 Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入cin、输出对象cout。

2.std::cin 是 istream 类的对象,它主要面向窄字符(narrow characters (of type char))的标准输入流

3.std::cout 是 ostream 类的对象,它主要面向窄字符的标准输出流

4.<<是流插入运算符,>>是流提取运算符(这里会涉及到后面的运算符重载等知识后续再讲)

5.使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型(本质上是通过函数重载实现的),但最重要的是C++的流可以更好的支持自定义类型对象的输入和输出


本篇的内容就到这里了,感谢你的阅读!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值