C++基础知识

微笑这里简单介绍下命名空间,输入输出流,重载,C++缺省参数,引用的概念、使用方法以及引用和指针的区别

命名空间

        以关键字namespace开始,其后接命名空间的名字,命名空间的名字在其所在作用域中是唯一的,命名控件可以在全局作用域或者其它作用域内部定义,但是不能在函数或者类的内部定义。

   namespace namespace_name

  {

     //declarations

  }


   注:命名空间作用域不能以分号结束。


     命名空间内部各成员之间可以直接访问,外部的代码必须指出所引用成员名字定义在哪个命名空间中。

  外部代码引用方式:

    (1)使用限定名 namespace_name::member_name

             (2)使用using声明:using namespace namespace_name
     在此声明之后,程序无需使用cpp_primer限定符,可直接使用成员名字Query。

      作用:用来处理程序中常见的同名冲突问题


C++基本的输入输出流


      1.标准输入流对象cin ,>> 是输入操作符

      eg: cin>>x; //此时,用户从键盘输入的数值会自动地转换为变量x的类型,并存入变量x内。x必须是

          基本的数据类型,而不能是void类型

  注:在默认情况下,运算符">>"将跳过空白字符,然后读入后面与变量类型相对应的值。


   2.标准输出流对象cout,<< 是输出操作符

     eg:cout<<x; //将变量y的值显示在屏幕上

    使用插入运算符“<<”进行输出操作时,可以把多个不同类型的数据组合在一条语句,也可以输出表达式的值  

    在C语言中,常用“\n”实现换行C++中增加了换行符endl,其作用与“\n”一样


  他们都属于C++标准库,所以都在std的命名空间中。

重载

       在同一作用域中,一组函数的函数名相同,参数列表不同(参数个数不同或类型不同),返回值可同可不同,编译器根据实参与形参的类型及个数的最佳匹配,自动确定调用那个函数,这就是函数重载。被重载的函数称为重载函数。

   重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。


eg:参数类型不同的重在函数  

#include<iostream>
#include<stdlib.h>
using namespace std;

int cube(int i)//求整数的三次方数
{
	return i*i*i;
}

long cube(long l)//求长整数的三次方数
{
	return l*l*l;
}

double cube(double d )//求整形的三次方数
{
	return d*d*d;
}

int main()
{
	int i = 5;
	long l = 123;
	double d = 5.67;
	cout<<i<<"*"<<i<<"*"<<i <<"="<<cube(i)<<endl;
	cout<<l<<"*"<<l<<"*"<<l <<"="<<cube(l)<<endl;
	cout<<l<<"*"<<l<<"*"<<l <<"="<<cube(d)<<endl;

	system("pause");
	return 0;
}
运行结果:

  


C++为什么支持函数重载?

  在linux下使用objdump查看目标文件中的函数名字的修饰,规则是:“返回类型+函数名+参数列表”。

  详见:http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html点击打开链接

C++缺省参数

       一般情况下,实参与形参个数相同,但C++允许实参与形参个数不同。方法是在说明函数原型时,为一个或多个形参指定默认值,以后调用此函数时,若省略其中某一实参,C++自动地以默认值作为相应参数的值。  

// 全缺省参数
int Add1 (int a = 0, int b = 0)
{
     return a + b;
}
 //半缺省参数
int Add2 (int a, int b = 0)
{
return a + b;
}

void Test ()
{
      Add1();
      Add1(1);
      Add1(1,1);
      Add2(2);
      Add2(2,2);
}

  注:(1)在函数原型中,所用取默认值的参数都必须出现在不取默认值参数的右边。即一旦开始定义取默认

           值的参数,就不可以再说明非默认值的参数。

      (2)在函数调用时,若某个参数省略,则其后的参数皆应省略而采用默认值。

指针和引用

      这里不再介绍指针,详细的介绍下引用

引用

  概念:

     引用不是定义一个变量,而是给一个已经定义的变量重新起一个别名

  格式:

   类型 &引用名 = 已定义的变量名

   eg: int i = 5;

     int &j = i;//使j成为变量i的引用,即变量i的别名

   注:引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间

  引用的特点:
    1. 一个变量可取多个别名
    2. 引用必须初始化
    3. 引用只能在初始化的时候
引用一次,不能改变为再引用其他的变量。


引用作为函数参数

  1.【值传递】如果形参为非引用的传值方式,则生成局部临时变量接收实参的值
   void swap(int m, int n)

   {

     int tmp = m;

     m = n;

     n = tmp;

   }//值传递,调用结束后,形参m和n的值交换了,但实参没有交换

  2.【指针传递】实参传给形参的是实参变量的地址,即“传址调用”

   void swap(int* m, int* n)

   {

     int tmp = *m;

     *m = *n;

     *n = tmp;

   }//
  3.【引用传递】如果形参为引用类型,则形参是实参的别名

   void swap(int &m, int &n)

   {

     int tmp = m;

     m = n;

     n = tmp;

   }//
使用引用返回函数值

  使用引用可以返回函数的值,采用这种方法可以将该函数调用放在赋值运算符的左边

  

 传值返回和传引用返回

   传值返回时,是将ret的值放在exa寄存器中

   传引用返回时,是将ret的地址放在exa寄存器中

 结论:
   
1. 不要返回一个临时变量的引用
    2. 如果
返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效


指针和引用的区别


  1. 引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。
  2. 引用必须指向有效的变量,指针可以为空。
  3. sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
  4. 指针和引用自增(++)自减(--)意义不一样。
  5. 相对而言,引用比指针更安全。

 总结:
   指针比引用更灵活,但是也更危险。使用指针时一定要注意检查指针是否为空。指针所指的地址释放以后最好置0,否则可能存在野指针问题。



  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值