Cpp入门小知识一

本文介绍了C++中的命名空间,包括其作用、使用方式和解决命名冲突的问题。using namespace std;语句用于释放标准库的成员,如iostream中的cin和cout。此外,讲解了C++的输入输出流、缺省参数以及函数重载的概念,展示了它们在实际编程中的应用。通过示例代码,帮助读者更好地理解和掌握这些基础知识。
摘要由CSDN通过智能技术生成

        相信大家刚接触c++的时候都会见到这2行代码。

#include<iostream>
using namespace std;

        在大家的认识中可能是不管三七二十一写上这2行代码就对了,管它是什么呢。那这2行代码是什么意思呢,有什么用呢?        

        #include<iostream>可以理解为跟c语言中的#include<stdio.h>类似、等价的。是来告诉我们控制台来进行输入输出的,它是IO流。那using namespace std是干嘛的呢?

        首先就要先了解一下其他东西。

        在c语言中存在一个命名冲突的问题,命名冲突又是什么呢?在c语言中定义一个变量的名称,第一要符合变量名规范,第二不能跟关键字同名,但没有规定不能跟库函数的名字一样。rang在c语言中是用来生成随机数的。用它作为变量名会如何呢?

编译是通过了,要是包上了该函数的头文件呢?就不通过了,出现了重定义。

         假如张三跟李四合作写一个项目,张三自己写了个头文件定义了个函数,李四在不知情的情况下定义了个变量跟张三的函数同样的名字,这不就起了命名冲突了吗。在c语言中是没有办法解决这个问题的,c++中引入了namespace用来解决这个问题的。

        namespace是什么呢,是c++中的一个关键字,namespace叫命名空间,需要使用到这个关键字时候后面跟命名空间的名字,这个名字可以随便取,然后接一对{}即可,{}中即为命名
空间的成员。

         在命名空间里定义rand这时候就编译通过了,但其结果怎么是一串很长的数字呢,其实打印的是它的函数指针,就是它的函数地址,只是以%d的格式打印,没有用%p打印。

        如果我们定义一个变量跟函数,名字在同样的情况下是会报错。

 同理我们命名空间里定义函数fun就不会报错。

 最后如果我们定义了一个局部变量跟全局变量且是同名的情况下,会打印出0,因为局部变量优先于全局变量。

         那咱就偏不打印局部变量的,而要让它打印全局变量的呢,这个好办,c++中有一个叫域作用限定符 :: ,只要在a的前面加上::就可以访问全局域::a   : : 前面是空白什么也没有,默认访问全局域里的a。

         回到命名空间,如果要访问命名空间里的成员时,是不是也可以用到域作用限定符,答案是可以的。test::rand  意思是访问test命名空间域里面的成员rand。如果也想访问该命名空间里的其他成员也是一样的操作。

         看到这里可能大家对命名空间到底是什么都还很懵逼,其实可以这样理解:namespace命名空间相当于是一个隔离空间,把变量、函数、类型关在这个隔离间里,与外界没有联系。我们在电视中可能会看到过这种情节,女方的老公因为做了犯法的事被抓去坐牢子,女方想要探望她老公的话会被带进去一个房间里面,里面有一个玻璃隔层,男方在那一边,女方在另一边,双方隔着一个玻璃层靠着电话在沟通。这种得靠着电话才能说话、互相听到彼此的声音的操作,就相当于可以用域作用限定符来访问命名空间里的成员一样。

 namespace命名空间总结:

              1、空间成员是可以定义变量、函数,类型的。

        

              2、命名空间是可以嵌套的

        

         3、如有存在多个相同名称的命名空间,编译器最后合并成一个命名空间里。

      

          4、不能在函数内定义命名空间

                

        要是一直得用域作用限定符才能使用命名空间里的东西话,那岂不是很繁琐很占用时间,有没有办法解决?

         有的。可以用using namespace test; 这句代码的意思是把关在命名空间里的成员全部释放出来。这样就可以直接用这些成员了。

 但要注意的是释放了命名空间的成员会引起冲突反而失去了命名空间的作用了。

 换种方法:我们可以把需要经常使用到的成员单独释放出来,比如命名空间里的Add函数是我们要频繁使用的,可以单独释放出来。

using test::Add; 意思是单独释放命名空间里的Add成员。

         现在知道C++中的using namespace std;是什么意思了吗,就是释放std库里面的成员。std是C++中标准库的命名空间。比如我们要用到的输入输出cin、cout就是定义在#include<iostream>这个头文件里面,如果没有用using namespace std来释放std命名空间的话,去使用则会出现未声明。

释放std全部成员后虽然可以直接使用了。但会存在风险。

        那要是不全部释放std呢也是有办法使用的。可以用域作用限定符。

         上面讲过释放命名空间里的全部成员的话会引起冲突,如果我们释放std里的全部成员,定义了一个叫cout的变量使用它就会报错。可以单独释放也可以用域作用限定符,命名空间的优势就体现出来了。

         在我们日常练习中是可以全部释放的但会存在命名冲突的风险,所以在项目里我们去指定释放常用的。

输入输出

        >>        流提取运算符

        <<        流插入运算符

        cin        标准输入流

        cout      标准输出流

       cin是用来输入的,cout是用来输出的。在c语言中的scanf,printf使用的时候需要控制它的格式会很繁琐,而cin、cout不需要控制格式了,自动识别类型,使用更便捷了。

#include<iostream>
using namespace std;

int main()
{
	int a = 0;
	int b = 0;
	cout << "请输入a,b:";
    
    //可以同时输入多个
	cin >> a >> b;
    
	cout << "a =" << a << " " << "b =" << b << endl;    //endl是换行的意思

	return 0;
}

缺省参数(也叫默认参数)

        缺省参数是声明或定义函数时为函数的参数设置一个默认值。在调用该函数时,如果没有传指定实参的话则使用设置好的默认值,否则使用传过去的指定实参。

        如果还不知道缺省参数是什么,这里举个例子:在男女感情交往的过程中,可能会存在这么种情况,女方面对一个自己不喜欢的异性表白,把他给拒绝了。但也不会拒绝这个异性对她的好,每逢节日必送礼、红包……照收不误,需要他时就找他,不需要时则把他晾在一旁。这或许就是传说中的“备胎”吧,突然有一天,这个女的有了男朋友,就不再去找这个“备胎了”。我们可以把缺省参数(默认参数)当成是“备胎”,而传过去的实参是男朋友,没有传实参的话我们就用这个“备胎”,如果有了实参,就晾着“备胎”不管了呗,用着男朋友就No problem了呀!!!

 //设置默认参数值
void TestFun(int a = 10, int b = 10)
{
	cout << "a=" << a <<" ";
	cout << "b=" << b << endl;
}

int main()
{
	//如有传实参则采用传过去的值
	cout << "有传实参:";
	TestFun(100, 200);

	//如没有传实参则采用设置好的默认值
	cout << "没传实参:";
	TestFun();

	return 0;
}

         可能大家会想到该函数如有3个形参的话,只传一个、二个、多个实参呢?是可以的,但不能超过形参的个数。那可不可以跳过前一个,传实参给第二个呢?是不可以的。

 

缺省参数分类:

        全缺省参数:就是全部都给了默认参数值就叫全缺省参数。

        

        半缺省参数:就是部分没有设置默认参数值就叫半缺省参数。

        

        那半缺省参数可不可以中间不给默认参数,两边给呢?不可以的

         

 缺省参数应用场景:

         在用c语言实现顺序表各个接口时写的初始化是写死了的,如在需要存入大量数据的情况下,默认开辟了3个空间大小是不够用的,需要重新扩容影响效率。在这种情况下使用缺省参数的话就会非常的好用。

//c语言初始化顺序表,写死了的
void SeqListInit(SeqList*p)
{
	p->data = (SLDataType*)malloc(3 * sizeof(SLDataType));		//只开辟3个空间大小,如在存入大量数据的情况下空间会出现不够用,需要扩容会影响效率

	if (p->data == NULL)
	{
		printf("开辟内存失败\n");
		exit(-1);
	}

	p->size = 0;	//把存储个数初始化为0
	p->capacity = 3;	//容量初始化为3
}
//c++ 加入缺省参数来实现初始化顺序表
void SeqListInit(SeqList*p,int n=3)
{
	p->data = (SLDataType*)malloc(sizeof(SLDataType)*n);   //开辟n个空间大小

	if (p->data == NULL)
	{
		printf("开辟内存失败\n");
		exit(-1);
	}

	p->size = 0;	//把存储个数初始化为0
	p->capacity = n;	//容量初始化为n
}

int main()
{
    SeqList s;

   
	SeqListInit(&s);    //在不知需要插入多少数据的情况下,使用默认参数
  
    SeqListInit(&s,100);  //如知道要一次性插入100个数据的时候,则可以传100进行内存开辟空间

    return 0;
}

函数重载

        函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。

        在c中实现一个Add函数的话,如该函数的参数类型是int,那就只能用int型的实参,要是想用其他类型的就得重新实现一个函数但又不能跟Add同名,那就得每次为同功能的函数其不同的名字岂不很烦吗。

        然而在c++中可以支持同名函数来实现功能类似的函数。

重载要求:函数重载是看参数个数、类型、顺序(形参类型顺序)的不同,不是看返回值不同。

#include<iostream>
using namespace std;

//函数重载来实现不同类型的数据
int Add(int num1, int num2)
{
	return num1 + num2;
}

double Add(double num1, double num2)
{
	return num1 + num2;
}

double Add(int num1, double num2)
{
	return num1 + num2;
}

//函数重载是看类型不同跟类型顺序不同的
double Add(double num2,int num1)
{
	return num1 + num2;
}
int main()
{
    cout<<Add(1,1)<<endl;
	cout << Add(2.2, 2.2)<<endl;
    cout << Add(1, 2.2)<<endl;

	return 0;
}

        

HuangLuoH
关注 关注
  • 27
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CPP入门基础知识
NICOC_的博客
06-19 980
1.命名空间 2.C++基本的输入输出流 3.重载(C++为什么支持重载?)  4.C++缺省参数  5.指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别) ——————————————————————————————————————————————————————————————————— 1.命名空间 http://blog.csdn.net/passball
cpp入门基础知识
y_willing的博客
09-26 727
c++入门
C++Cpp入门基础知识
LazyFish的博客
06-21 781
Cpp入门基础知识  一,命名空间     首先应该明白数据在内存中的存储位置,如下图所示;  理解域为一个代码框,一个变量的作用域为一个代码框,在主函数外定义的无框变量的作用域是全局即整个程序。 在任何一个域中都可以使用全局变量,所以应尽量减少使用全局变量,会让程序不稳定。 在不同的域可以重名定义变量,如下面的变量a,输出时使用该域中的变量。 namespace定义一个域,u
cppc++)基础
alun550的博客
12-25 1万+
C++入门必备知识点纪录
33个c++重要知识总结(cpp代码)
06-13
c++基础知识复习,包含了33个cpp文件,每个文件包含特定主题的知识回顾,使用特定案例重温某些不常用但是重要的算法或函数的使用方法,含注释。
c++编程入门
weixin_63612725的博客
05-04 203
C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
cpp入门教程.rar
08-12
清华大学的这份"cpp入门教程"涵盖了C++的基础知识和高级特性,是初学者掌握C++的宝贵资源。 一、C++基础语法 C++的基础包括变量、数据类型、运算符、控制结构(如if语句、switch语句、for循环和while循环)以及函数...
CPP.zip_cpp入门教程_site:www.pudn.com
09-22
1. **基本语法**:C++的语法与C语言相似,包括变量声明、数据类型(如int, char, float等)、运算符、流程控制(如if-else, for, while语句)以及函数的使用。 2. **类和对象**:C++的核心是类,它是封装数据和操作...
cppPrimer:通过阅读cpp入门来学习c加号
03-28
C++ Primer: 通过阅读cpp入门来学习C++C++是一种强大的、通用的编程语言,由Bjarne Stroustrup在C语言的基础上发展而来,旨在提供更高级别的抽象和面向对象特性。C++ Primer是学习C++的经典教材,它为初学者...
70 CPP 文件操作
wade1010的专栏
12-31 880
d)不要以文本模式打开二进制文件,也不要用行的方法操作二进制文件,可能会破坏二进制数据文件的格式,也没有必要。(因为二进制文件中的某字节的取值可能是换行符,但它的意义并不是换行,可能是整数n个字节中的某个字节)当输入流操作未能读取预期的字符时,将设置failbit(非致命错误,可挽回,一般是软件错误,例如:想读取一个整数,但内容是一个字符串;c++存储整数的时候,需要4字节的内存空间,并且4字节要作为一整体来安排,把下面长长的二进制存进去,如果把每个字节分开来看,分别是(从右往左)97,1,2,0。
从C到C++
最新发布
Welcome To Myon'Blog !
05-05 1041
1、输入输出库与名字空间 2、输入输出流对象cin和cout 3、string字符串类 4、bool类型 5、自增++自减--运算符(必考) 6、其他
C++中回车换行(\n\r)和换行(\r)的区别
热门推荐
天涯明月的专栏
01-02 14万+
windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回车一下就是一个\n 给出如下代码: #include using namespace std; int main() { cout << "this is the first line\n"; cout << "this is the second line\r"; cout << "this is
C++中的回车(\n)和换行(\r)
juddi的专栏
10-19 3万+
‘\n’ 换行,光标移到下一行的开头; '\r' 回车,光标移到当前行的开头,不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖; #include &lt;iostream&gt; using namespace std;     int main()   {       cout &lt;&lt; "this is the first line\n";       c...
C字符串和C++字符串
weixin_30302609的博客
06-08 394
  在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串。C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示字符串的结束。需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组。 C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值。对C字符串的操作需要通过"string"文件中定义的字符...
C语言一行太长的换行处理
baiqishijkh的博客
02-02 10万+
在C语言程序编写中,我们有时会遇到一行代码太长而影响阅读或者出现与部分公司或组织要求的编码规范不符的情况,此时我们需要将这行代码分成多行来写。 一、针对一般语句换行 使用\结尾作为换行标记 在编译时,\后面的换行符将被忽略,当做一行处理。比如宏定义时使用 #define my_puts(x) printf("%s", \ x); 和写作 #define my_puts(x) pr
给.h .cpp文件批量在文件末尾加换行
rufeng18的专栏
04-27 1387
import os import re import time PATH=["game","common","protocol"] def Convert(foldpath):     for root, dirs, files in os.walk(foldpath):         for f in files:             filename = root
C++学习笔记: NO.3 换行符及代码格式化
m0_47158080的博客
10-28 368
书上2.1的完整代码如下: // myfirst.cpp -- displays a message #include <iostream> int main() { using namespace std; cout << "Come up and C++ me some time."; cout << endl; cout << "You won't regret it !" << endl
Cpp基础入门语法
Template Code
06-03 1253
一些基础的使用规则
Qt入门:从main.cpp开始
本文主要介绍了Qt用户界面设计的基础知识,包括Qt的基本概念、作用、特性、优势以及学习资源。在main.cpp文件中添加代码是Qt UI开发的一部分。 Qt是一个跨平台的C++应用程序和UI开发框架,它允许开发者创建具有图形...
写文章

热门文章

  • C语言——操作符详解 7015
  • 数据结构——栈 4386
  • Cpp入门小知识一 4108
  • c++之继承 3799
  • cpp——引用 3196

最新评论

  • lvgl中的lv_event_get_current_target_obj理解

    CSDN-Ada助手: 恭喜您写了第16篇博客!看了您关于“lv_event_get_current_target_obj”的理解,收获颇丰。希望您能继续保持创作的热情和劲头,不断分享您的心得体会。下一步建议可以尝试深入探讨lvgl中其他函数或特性的用法,或者分享一些实际项目中的应用经验,相信会给读者带来更多启发和帮助。期待您更多精彩的分享!

  • c++之继承

    顾小兔子乖乖: 来了老弟

  • Cpp入门小知识一

    老菜园的小嫩芽: 写的好好

最新文章

  • lvgl中的lv_event_get_current_target_obj理解
  • c++多态
  • c++类和对象(二)
2024年1篇
2023年1篇
2022年12篇
2021年2篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家陕西玻璃钢彩绘雕塑小品玻璃钢消防卡通形象雕塑仿银玻璃钢雕塑广州玻璃钢雕塑沙发溧阳玻璃钢头像雕塑江都玻璃钢浮雕人物山水雕塑上海来宾玻璃钢人物雕塑玻璃钢雕塑厂费用中秋节国庆节商场美陈江西所有玻璃钢雕塑厂山西室内不锈钢玻璃钢仿铜雕塑湖南肖像玻璃钢彩绘雕塑兰州户外玻璃钢雕塑价格随州商场美陈怒江玻璃钢雕塑订做河南玻璃钢雕塑厂招聘嘉兴小区玻璃钢雕塑生产厂家杭州玻璃钢雕塑厂家报价多彩玻璃钢雕塑多少钱廊坊玻璃钢仿真水果雕塑厂家海南玻璃钢仿铜雕塑昆明景观玻璃钢雕塑哪家便宜圣诞风格商场美陈厦门玻璃钢卡通雕塑报价萍乡人物玻璃钢雕塑辽中玻璃钢雕塑厂家五华区玻璃钢雕塑制作设计哪家好龙岩园林玻璃钢雕塑哪家好武威公园玻璃钢雕塑定做商场美陈墙面香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化