C++中的几个概念

C++中的几个概念

1.命名空间
关键字:namespace
目的:为了解决变量命名冲突的问题,同一个变量名a在不同的作用域下,含义是不同的。

#include<iostream>
using namespace std
namespace AA1
{
  int a =10;//在AA1::a中
}
namespace AA2
{
   int a = 20;//在AA2::a中
   namespace AA3
   {
      int a = 30;//可以嵌套使用
   }
}

2.C++基本的输入输出流
<1>标准输入流对象cin
在头文件中,指从标准输入设备(键盘)中输入。“>>”提取运算符,与cin配合使用,其作用是从输入设备(键盘)中提取数据送到输入流cin中。

cin<<a;
cin<<a<<b;
cin<<a+b;

<2>标准输出流对象cout
在 头文件中,指输出到显示屏中。“<<”插入运算符,与cout配合使用,其作用是将“<<”右侧的插入到输出的队列cout中。

cout<<a;
cout<<a<<" "<<endl;
cout<<"hello bit"<<endl;

3.重载(C++为什么支持重载?)
重载:在C++中,在同一个作用域中,函数名相同,而函数参数类型或函数参数个数不同的情况。
在C中,在同一作用域中,函数名唯一;在C++中,在同一作用域中,要求函数签名唯一。所谓函数签名,指函数名+参数列表。
由于C++有函数名修饰规则,从而使得C++可以重载。

int f(int x,int y)//会被重新命名为类似_Z1fic的形式
int f(int x,double y)//_Z2fid

4.C++缺省参数
所谓缺省参数,就是在声明函数的某个参数的时候给它指定一个默认值,在调用函数时,当使用默认参数时,就不需要给值。规则:带缺省值的参数必须放在参数列表的最后面。

int Add1(int a,int b = 20)//半缺省
{
  return a+b;
}
int Add2(int a = 10,int b = 20)//全缺省
{
  return a+b;
}
//调用
Add1(10);
Add1(10,30);
Add2();
Add2(20,40);

5.指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)
区别:
指针:变量的指针是变量的地址,用来存放变量地址的变量就是指针变量。即指针是指向一个地址的。

int *p11,*p12;//定义指针变量p1,p2
int a = 10;
int b = 20;
p11 = &a;//将a的地址赋给p1
p12 = &b;//将b的地址赋给p2
//指针做函数参数
swap(p11,p12);//交换*p1和*p2

void swap(int *p1,int *p2)
{
   int tmp = *p1;
   *p1 = *p2;
   *p2 = tmp;
}
//指针做返回值
int* a(int x,int y)//调用它以后返回一个指向整型数据的指针(地址)。

引用:引用一个变量是指是该变量地址的一个别名。即可以通过引用来改变该变量所指向的值。

int a = 10;
int &b = a;//b是a的别名
b = 30;//通过b来改变a,此刻a=30

//引用做函数参数
int i = 3,j = 5;
swap(i,j);
//
void swap(int &a,int &b)
{
 int  tmp =a;
 a = b;
 b = tmp;
}
//引用做函数返回值
int& f(int a,int b)
{
  int ret = a+b;
  return ret;//临时变量
}

返回的是一个临时变量,将返回值的地址储存在寄存器中,接收的时候是接受这个变量的引用,虽然结果正确,但存在问题。在函数调用完成以后,栈帧销毁,如果在调用一个其他函数,这个接收的值就有可能发生变化,产生一个随机的值。

结论:1.不要返回一个临时变量的引用
2.如果返回对象出了当前函数的作用域依然存在,则最好使用引用返回,这样比较高效。
区别:
1.引用只能在定义时初始化一次,之后则不能改变使它指向另一个变量(从一而终);而指针变量的值是可以改变的。
2.引用必须指向有效的变量,而指针可以为空(NULL)
3.sizeof指针和引用的意义不同,sizeof指针对象:对象地址的大小,sizeof引用对象:所指向变量的大小。
4.指针和引用自增(++)和自减(- -)意义不同。

int a[2] = {2,3};
int* pa = a;
int &b = a[0];

pa++: pa现在指向a[0],pa++就是指向下一个元素的地址,即a[1]
b++ : b指向a[0]元素的值2,b++则指向a[1]元素的值,即3
5.引用比指针更加安全一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值