c++基础知识(命名空间、输入输出流、重载、缺省、引用)

一、命名空间 

    (1)命名空间域是随标准c++而引入的,相当于一个更加灵活的文件域(全局域)。可以用花括号把文件的一部分括起来,并以关键字namespace开头给命名空间起一个名字,同时采用using指示符进行。其结构如下:

eg1:

namespace my

{

    int a=0;

}

eg2:

namespace you

{

    int a=1;

}

    若以上两个命名空间在同一函数内进行全局定义,则程序不会报错,可见同名变量在同一作用域中是可以共同存在的。因此,命名空间域解决了全局命名冲突的问题。

    另外,命名空间是可以嵌套的,如下例:

eg3:

namespace you

{

    int a=1;

    namespace he

    {

        int b=3;

    }

}

    (2)在访问命名空间中的变量时,可以使用作用域解析符(域作用访问符)::。例如在访问eg1中的变量a时,可以采用my::a语句,在访问eg3中的变量b时,可以采用you::he::b语句。

    (3)标准c++库中的所有组件都是在一个被称为std的命名空间中声明和定义的,即namespace std是c++标准库的命名空间。在采用标准c++的平台上使用标准c++库中的组件时,只需要一个using指示符,从而用using namespace std;语句来使用c++标准库。

    除此之外还可以直接使用::符号使用c++标准库中的成员,如下例:

eg4:

std::cout<<"123"<<std::endl;


二、C++基本的输入输出流

    cout是c++中的标准输出流对象,<<是输出操作符;cin是c++中的标准输入流对象,>>是输入操作符。

    它们都属于c++标准库,所以都在std命名空间中。


三、重载

    所谓函数重载,即在同一作用域内,一组函数的函数名相同,参数列表不同(个数或类型不同),返回值可相同也可不相同。

    例如Swap(int a,int b){}与Swap(char a,char b){}两个函数即Swap函数的重载。之所以两个函数可以同时存在,还在于c++对函数名的修饰规则。其实在底层操作中,如在汇编语言中,会将第一个Swap函数的名字定义为-Z4Swapii,而将第二个Swap函数的名字定义为-Z4Swapcc。以下为其解释:



四、C++缺省参数 

    对于缺省参数的函数,可以从下面的例子中进行学习。

int Add (int a=10,int b=20)

{

    return a+b;

}

cout<<Add(1,2)<<endl;

cout<<Add()<<endl;

cout<<Add(5,)<<endl;

cout<<Add(,5)<<endl;

    输出分别为:3、30、25、err。此时Add函数为全缺省函数,若传实参则用实参的值,若不传参则用缺省默认的。

    同时还有一种半缺省函数:

int Add(int a,int b=10)

{

    return a+b;

}

    需要注意的是,对于半缺省函数,只能从右往左进行缺省。


五、指针和引用

(1)引用的概念

    引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。定义的格式为: 类型 &引用变量名=已定义过的变量名。

(2)引用的特点

    一个变量可以取多个别名(有多个引用)。

    引用必须初始化。

    引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。

(3)使用需要注意的地方

    a. 常量具有常属性,在引用时只能用常引用。

    b. 对于double d7=1.1;int &d8=d7;  运行时会出错,因为d7是double型的,d8是int型的,在d7赋值给d8时,需要生成一个临时变量,而d8引用的便是这个具有常属性的临时变量。

(4)引用做函数参数

    a. 如果形参为非引用的传值方式,则生成局部临时变量接受实参的值。如果形参为引用类型,则形参是实参的别名。

    b. 当不希望函数内改变x的值时,尽量使用常引用传参。

    c. 不要返回一个临时变量的引用。

    d.如果返回对象出了当前函数的作用域依然存在,则最好使用引用传参,因为这样更高效。

(5)引用与指针的区别和联系

    a. 引用只能在定义时初始化一次,之后不能再指向别的变量;指针的值可变。

    b. 引用必须指向有效的变量,指针可以为空。

    c. sizeof引用得到的是所指向变量的大小,sizeof指针得到的是对象地址的大小。

    d. 引用++是加值的大小,指针++是加类型大小。

    e. 相对而言,引用比指针更安全。


猜你喜欢

转载自blog.csdn.net/gunqu_d/article/details/78234972