【C++基础入门】命名空间 ;.c/.cpp输入输出流;缺省参数;函数重载;引用;auto;范围for

 🍉内容专栏:【C/C++要打好基础啊】

🍉本文脉络:1.命名空间;2. .c/.cpp输入输出流3.缺省参数;4.函数重载;5.引用;6.auto;7.范围for

🍉本文作者:Melon西西

🍉发布时间 :2023.1.28 


目录

1.命名冲突问题——命名空间

1.1.用namespace定义了一个叫apple的命名空间—域(::叫域作用限定符)

(1)namespace里的还是全局变量,放到静态区,仅仅是隔离的作用

(2)命名空间中可以定义变量,函数,类型(如结构体)

(3)命名空间可以嵌套定义

(4)同一个工程里允许存在多个相同的命名空间,编译器会把它们合在一起

1.2.命名空间的使用

(1)使用命名空间名称及域限定符 : : (如上面代码所示)

(2)使用using将命名空间中某个成员引入

(3)使用using namespace 命名空间名称引入

 2.输入输出流

 3.缺省参数

 4.函数重载

 5.引用

5.1.引用概念:

5.2.引用特征:&引用变量名(对象名)=引用实体

引用注意:

 5.3引用在函数中的使用和常引用

 5.4.指针和引用的区别

 6.auto变量

 7.范围for(语法糖)

举例:1.打印数组arr

举例:2.用范围for把数组的每个值+1


1.命名冲突问题——命名空间

可能出现哪些冲突呢:自己命名的函数和库里面重名冲突;多人协作命名冲突。

cpp提出一个新的语法,命名空间——namespace

1.1.用namespace定义了一个叫apple的命名空间—域(::叫域作用限定符)

(1)namespace里的还是全局变量,放到静态区,仅仅是隔离的作用

namespace apple
{
   int a = 5;
   a=8;//这行是错的,不可以在这里修改赋值
}

int main()
{
   int a =10;
   cout<<a<<endl;        //这个输出的apple=10 ;
   cout<<apple::a<<endl;  //这个输出的apple=5  ;
   apple::a = 8 ;         //这样是对的,可以在这里修改值;
   rerturn 0;
}

(2)命名空间中可以定义变量,函数,类型(如结构体)

namespace apple{  }
int main()
{
apple :: QIUHE(1,2);//函数
apple :: a;         //变量
struct apple :: Student stu1;//结构体
return 0;
}

(3)命名空间可以嵌套定义

namespace apple
{
     int a = 8;
     namespace banana
     {
     int a = 10;
     }
}
int main()
{
  appple::a = 80;
  apple::banana::a = 100; 
  return 0;
}

(4)同一个工程里允许存在多个相同的命名空间,编译器会把它们合在一起

1.2.命名空间的使用

(1)使用命名空间名称及域限定符 : : (如上面代码所示)

指定作用域,做到最好的命名隔离,但是使用不方便。(常用)

(2)使用using将命名空间中某个成员引入

单独展开某一个常用的,其他的不展开 (常用):using apple :: a ;

(3)使用using namespace 命名空间名称引入

把整个命名空间展开(慎用):  using namespace apple;

全部展开,用起来方便,但是隔离失效了


using namespace std ;    std:C++库的实现定义在一个叫std的命名空间中

不用上面的可以指定命名空间把常用的展开 :

std : :cout<<"  " <<std : : endl;  ==   using std : : cout; ==  using std : : endl; 

 2.输入输出流

 # include <iostream>  输入输出流

C++和C的输入输出流可以混在一起写(必须是.cpp)


struct Student
{
char name[20];
int age;
};
int main()
{
struct Strutc stu1={ "西西",20 };
}

分别用.cpp和.c的输出流输出stu1的信息 (各有优势)

cout << "姓名:" << stu1. name << endl;

cout << "年龄:" << stu1. age << endl;

printf ( "姓名:%s\n年龄:%d\n",s.name,s.age);

 3.缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。

声明和定义的缺省值不能不同。

再调用这个函数的时候,如果没有指定实参就用这个值,有就用指定的实参。

全缺省参数:全用的缺省值。后三个半缺省参数。

给缺省值只能从左往右给,不可跳过a给b赋值。

 4.函数重载

C++允许在同一作用域声明几个功能类似的同名函数。

这些同名函数的形参列表(参数个数,类型,顺序)不同即可。

返回值不同不能构成重载函数,看的是参数。

 5.引用

5.1.引用概念:

引用相当于给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量公用同一块内存空间。

5.2.引用特征:&引用变量名(对象名)=引用实体

 int a = 5;  int &b = a; (这是引用)

int *p = &a; (这是取地址)

引用没有开辟新的空间,而是给原来a的空间取了一个新名字叫b。


引用注意:

引用在定义时必须初始化;

一个变量可以有多个引用;

引用一旦引用一个实体,就不能再引用其他实体,但是可以进行赋值等操作。

 5.3引用在函数中的使用和常引用

void swap(int &r1,int &r2)
{
   int temp = r1;
   r1 = r2;
   r2 = r1;
}
int main()
{
   int x = 2,y =3 ;
   swap( &x , &y );
   return 0; 
}

 

注意:如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用引用返回,如果已经还给系统了,则必须使用传值返回。

 5.4.指针和引用的区别

 因为指针很灵活,所以相对而言引用更安全

 6.auto变量

auto可以推到和推导变量类型;

C++可以用cout<<typrid().name() ;  来打印变量类型

int a = 0;
int b = 0;
auto c = a;      //自动推到c的类型是a的int
auto d = 'B' ;   //自动推导d的类型是char
auto e = 23.45;  //自动推导e的类型是double

//C++打团变量的类型
cout<<typrid(c).name();     //int
cout<<typrid(d).name();     //char
cout<<typrid(e).name();     //double

 7.范围for(语法糖)

举例:1.打印数组arr

int arr [ ]={1,2,3,4,5,6};
//C/C++遍历数组
for(int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
{
cout<< arr[i] <<"  ";
}
//C++范围for
for(auto x : arr)   //常用auto
{
cout<< x <<" ";
}
for(int y : arr)    //这样也可以
{
cout<< y <<" ";
}

 后两种都可,会自动一次取数组arr中的每个元素赋值给x(y),也会自动判断结束

举例:2.用范围for把数组的每个值+1

int arr [ ]={1,2,3,4,5,6};
for(auto &x : arr)
{
   x++
}
for(auto x : arr)
{
cout<<x<<endl;
}

写在最后:

博主大一学识尚浅,内容仅供参考,欢迎大家在评论区交流分享。

以后会经常发关于C/C++的学习心得,感兴趣的小伙伴可以点个关注支持一下^_^

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值