【C++学习手札】-using与namespace详解,基本的输入与输出使用

                                          食用指南:本文在有C基础的情况下食用更佳

                                         🔥这就不得不推荐此专栏了:C语言

                                         ♈️今日夜电波:あいつら全員同窓会——ずっと真夜中でいいのに。

                                                                  1:21 ━━━━━━️💟──────── 4:14
                                                                          🔄   ◀️   ⏸   ▶️    ☰

                                         💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍


目录

C++的第一个程序

#include<iostream> 的解析

第一个程序

using namespace std;

cin、cout、endl

C++对C的扩展

1、::作用域运算符(表明 数据、方法 的归属性问题)

2、命名空间 namespace 解决命名冲突

2.1 namespace命名空间的定义

2.2  命名空间可嵌套命名空间

2.3 可以随时把新的成员加入已有的命名空间中(常用)

2.4 命名空间 可以存放 变量 和 函数

2.5 命名空间中的函数 可以在“命名空间”外 定义

对于namespace的拓展

  3、using使用命名空间

3.1 简化从命名空间的成员访问

 3.2 using 使用整个命名空间

3.3 using 指明使用具体的命名空间成员

 3.4 using声明碰到函数重载

总结


C++的第一个程序

        开始的开始,我们写程序的第一步是啥?

        头文件!

        写C++的第一个程序从头文件开始!

#include <iostream>的解析

        iostream是啥意思呢?来我给你分分! I  O  stream

        啥意思呢?        i-input 输入 o-output输出 stream-流

        这个头文件本质上类似C语言的stdio.h,是输入输出流头文件!

        好,头文件找到了我们开始写第一个程序吧!

第一个程序


#include <iostream>

//std(标准) 使用标准的命名空间
using namespace std;

//有且只有一个主函数 可以有多个其他函数
int main(int argc, char *argv[])
{
//cout 输出 类似 c语言的printf
//endl 类似 c语言的 换行符
// printf("Hello world!\n");

//cout代表的输出设备
cout << "Hello world!" << endl;//将字符串输出到 控制台

//cin代表的是输入设备
int num =0;
cin >> num;//将建键盘输入的数据 赋值给 num
cout<<"num = "<<num<<endl;

return 0;
}

        这时候问题又来了?using namespace std;又是啥?

using namespace std;

        使用using namespace std;是一种简化代码的方式,它可以完全打开std命名空间,使得在代码中可以直接使用std中的函数和对象,而不需要在前面加上命名空间名称和  ::   

        啥意思呢? 请看下面这段代码:

    printf("Hello world!\n");//C语言常用形式
	
	int num = 0;
	scanf("%d,&num");
	printf("%d\n",num);

//以下为C++中支持的输出输入方式

    using namespace std;
    cout << "Hello world!" << endl;//加入了using namespace std;后

    int num =0;
    cin >> num;
    cout<<"num = "<<num<<endl;

//

	std::cout << "hello world!" << std::endl;//无using namespace std;

	int num = 0;
	std::cin >> num;
	std::cout << num << std::endl;

        通过比对,我们很容易就能观察到C++中,加入了using namespace std;后,与没有加入前的区别,加入后就不需要在输入输出以及换行前加入std::了!

        接着我们再来看看其中与C语言相对应的操作!

cin、cout、endl

cin == scanf

cout == printf

endl == '\n' 

        注意:endl中的 l 是字母 l 而不是数字 1  !!!


C++对C的扩展

1、::作用域运算符(表明 数据、方法 的归属性问题)

        先看下面这一段代码 

using namespace std;
int a = 10;//全局变量
void test1()
{
    int a = 20;//局部变量
    cout<<"局部变量a = "<<a<<endl;//优先选择局部变量

    //::作用域运算符(c++独有)
    cout<<"全局变量a = "<<::a<<endl;//取全局变量
}

         输出结果为:


2、命名空间 namespace 解决命名冲突

2.1 namespace命名空间的定义

        看看下面这段代码:

//定义一个名字为A的命名空间(变量、函数)
namespace A {
int a = 100;
}
namespace B {
int a = 200;7 }
void test2()
{
//A::a a是属于A中
cout<<"A中a = "<<A::a<<endl;//100
cout<<"B中a = "<<B::a<<endl;//200
}

        注意:命名空间只能全局范围内定义!!

2.2  命名空间可嵌套命名空间

        栗子:

namespace A 
{
int a = 1000;
namespace B 
{
int a = 2000;
}
}

void test3()
{
cout<<"A中的a = "<<A::a<<endl; //1000
cout<<"B中的a = "<<A::B::a<<endl; //2000
}

2.3 可以随时把新的成员加入已有的命名空间中(常用)

        栗子:

namespace A {
 int a = 100;
 int b = 200;
 }
 //将c添加到已有的命名空间A中
 namespace A {7 int c = 300;
 }
 void test4()
 {
 cout<<"A中a = "<<A::a<<endl;//100
 cout<<"A中c = "<<A::c<<endl;//200
 }

2.4 命名空间 可以存放 变量 和 函数

         栗子:

namespace A {
 int a=100;//变量

void func()//函数
 {
 cout<<"func-a = "<<a<<endl;
 }
 }
 void test5()
 {
 //变量的使用
 cout<<"A中的a = "<<A::a<<endl;

 //函数的使用
 A::func();
 }

2.5 命名空间中的函数 可以在“命名空间”外 定义

       栗子:

namespace A {
 int a=100;//变量

void func();
 }

void A::func()//成员函数 在外部定义的时候 记得加作用域
 {
 //访问命名空间的数据不用加作用域
 cout<<"func-a = "<<a<<endl;
 }

 void funb()//普通函数
 {
 cout<<"funb-a = "<<A::a<<endl;
 }

 void test6()
 {
 A::func();
 funb();
 }

对于namespace的拓展

        1、无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识
符加上了static,使得其可以作为内部连接。

        2、可以对命名空间取个别名

         栗子:

namespace A
{
    int a=10;
}

void text7()
{
    namespace B = A;
}

  3、using使用命名空间

3.1 简化从命名空间的成员访问

        栗子:

namespace AB {
 int a=100;
 void func(){cout<<"hello world!"<<endl;}

 }
 void test8()
 {

//使用AB命名空间
 using namespace AB;

//出现的变量 从AB命名空间中找 找不到 从其他地方中
 cout<<"a = "<<a<<endl;
 func();
 }

 3.2 using 使用整个命名空间

        看了上面这个例子,我们不妨思考一下,如果我在定义了一个相同名字的局部变量或者全局变量(此直接使用报错)呢?客官别急,且听我为你 一 一 讲解💪

        栗子:

        局部变量:

namespace AB {
	int a = 100;
	void func() { cout << "hello world!" << endl; }

}

void test8()
{
	int a = 200;
	

	//使用AB命名空间
	using namespace AB;

	//出现的变量 从AB命名空间中找 找不到 从其他地方中
	cout << "a = " << a << endl;//访问的是局部变量中的a
	cout << "a = " << AB::a << endl;//访问的是AB的a
	func();
}

         全局变量:

        话不多说!直接上图!

         这里为VS2022下的报错,可见这样定义是不能用的!但是如果我硬是要这么用呢?看下一点,这时需要指定命名空间中的成员,这样才不会与全局变量冲突!
 

3.3 using 指明使用具体的命名空间成员

        这里先了解两条规则:        

        1、using直接使用 命名空间中的成员 不会和 全局变量冲突。

        2、using直接使用 命名空间中的成员 会和 局部变量冲突。


        栗子:

全局变量

namespace AB {
	 int a = 100;
	 void func() { cout << "hello world!" << endl; }
	
}
 int a = 200;
 void test8()
 {
	 //using直接使用 命名空间中的成员 不会和 全局变量冲突
		 using AB::a;
	
		 cout << "命名空间中a = " << a << endl;//命名空间中的成员 100
	 cout << "全局变量中a = " << ::a << endl;//200
	
		 //但是func使用的时候 必须加作用域
		 AB::func();
	 }

int main()
{
	test8();
	return 0;
}

 局部变量

        报错啦!!!

 3.4 using声明碰到函数重载

namespace A {
	 //函数重载 函数名+参数 组合代表是函数的入口地址
	 void func() { cout << " 无参的func" << endl; }
	 void func(int a) { cout << " int的func" << endl; }
	 void func(int a, int b) { cout << " int int的func" << endl; }

}
 void test9()
 {
	 //using指明 使用 A中的func 会对 所有的func起作用
	 using A::func;
	 func();
	 func(10);
	 func(10, 20);
 }


总结

        不知道各位读者在看完本文后是否跟作者与相同的疑惑,using namespace std;跟using和namespace是不是有啥关联呢?👀

        这里说明一下main中的std:

        1、使用标准的命名空间std。
        2、std中所有成员名 可以直接使用。
        3、cout endl cin都是命名空间std的成员。

简单的来说就是这个std其实跟我们上面用using、namespace的原理是相同的!

        以下是详细的介绍:

using namespace std;是C++中的一个命名空间的声明语句,它的作用是引入标准命名空间std中的所有成员,使得在代码中可以直接使用std命名空间中的函数、类、对象等,而不需要使用std::前缀。

using声明是C++中的一个语法结构,它可以用来引入命名空间中的特定成员。例如,可以使用using std::cout;来引入std命名空间中的cout对象,之后就可以直接使用cout,而不需要使用std::cout。

namespace是C++中的一个关键字,用于定义命名空间。命名空间可以看作是一个容器,用于将全局作用域中的标识符(如变量、函数、类等)进行分组,以避免命名冲突。例如,std命名空间中包含了许多标准库的函数和类。

因此,using namespace std;语句的作用就是引入std命名空间中的所有成员,使得在代码中可以直接使用std命名空间中的函数、类、对象等,而不需要使用std::前缀。


        感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!

                                                                给个三连再走嘛~

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
好的,你的问题是关于Python函数第二次运行报错和retry的简单用法。 首先,如果一个Python函数在第二次运行时出现了错误,可能是由于函数内部的变量状态发生了变化,导致程序出错。为了解决这个问题,可以使用retry功能来多次尝试运行该函数,直到它成功为止。 使用retry功能可以在函数出现错误时自动重试,可以避免手动重复运行该函数,从而提高效率。 下面是一个简单的示例代码,演示了如何使用retry功能: ```python import time from retry import retry @retry(delay=1, backoff=2, max_delay=4) def my_func(): print("Running my_func...") # 模拟函数出错 if time.time() % 2 == 0: raise ValueError("Oops! Something went wrong...") else: print("Success!") my_func() ``` 在这个示例代码中,我们使用了retry库中的retry装饰器来装饰my_func函数,该函数会运行多次,直到成功为止。在retry装饰器中,我们设置了最大延迟时间为4秒,每次重试前等待1秒,重试间隔时间呈指数级增长,即第一次重试后等待1秒,第二次重试后等待2秒,第三次重试后等待4秒,以此类推,直到达到最大延迟时间为止。 当my_func函数第一次运行时,它会输出“Running my_func...”和“Success!”,并正常结束。当函数第二次运行时,它会抛出一个ValueError异常,并重试多次,直到成功为止。 希望这个简单的示例可以帮助你理解如何使用retry功能。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕斯( ˘▽˘)っ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值