一.命名空间
命名空间相当于一个更加灵活的文件域。
使用方法:
namespace
name1
{
int
a = 0;
}
namespace
name2
{
int
a = 0;
}
name1 :: a = 3;
name2 :: b = 4;
:: 作用域解析符
命名空间作用:
解决全局命名冲突的问题,全局变量有时命名可能发生重复,所以引入命名空间解决此问题。
2.C++基本的输入输出流
#include
<iostream>
using
namespace
std;
int
main()
{
int
a = 0;
cin = a;
//
输入流
cout << a<< engl;
//
输出流
return
0;
}
cout 是标准输出流对象,cin 是标准输入流
<< 是输出操作符 >>是输入操作符
endl 是换行操作符
ps: c++中输出不需要格式控制
3.重载
重载的定义: 对于在不同类型上作不同运算而又 用同样的名字的情况,则称之为重载。
命名规则:在同一作用域类, 一组函数的函数名相同,参数列表不同,个数不同,类型不同。返回值可以相同也可以不同。
c++支持重载原因是因为c++有函数名修饰规则。
例如:
void
binary(
int
a,
int
b,
char
c)
void
binary(
char
a)
这两个函数名在Linux环境下,函数名经修饰变成了:
_Z6binaryiic
_Z6binaryc
4.C++缺省参数
缺省函数在函数声明中提供,当又有声明又有定义时,定义中不允许再给默认值。
分类
(1)全缺省参数:所有的参数都给出了默认值。
(2)半缺省参数:两个参数时,第一个参数不缺省:两个参数以上:至少第一个参数不缺省,但是默认参数应从右
至左逐渐被定义。
缺省函数在调用时,只能向左匹配参数。
5.指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)
(1)引用的概念:
引用是别名,当建立引用时,程序用另一个变量或对象的名字初始化它。从那时起,引用作为目标的别名而使用,对引用的改动实际就是对目标的改动。
(2)使用方法:
先写下目标的类型,后跟引用运算符“&”,然后是引用的名字。引用能使用任何合法变量名。
以引用一个整型变量为例:
int
someInt;
int
& rInt = someInt;
ps: 声明rInt 是对整数的引用,初始化为引用someInt.此处要求someInt已经有声明或定义,而引用仅仅是他的别名。引用不是值,不占存储空间,目标的存储状态不会改变。并且引用只能引用一次。
(3)引用作参数:
如果形参为引用类型,则形参是实参的别名。
传递引用给函数与传递指针的效果一样,传递的是原来的变量或对象,而不是在参数作用域内建立变量或对象的副本。
#include
<iostream>
using
namespace
std;
void
swap(
int
& rx,
int
& ry)
{
int
temp;
temp = rx;
rx = ry;
ry = temp;
}
int
main()
{
int
x = 5;
int
y = 6;
cout <<
"before swap, x:"
<< x<<
",y"
<<y<<endl;
swap(x,y);
cout <<
"after swap, x:"
<< x<<
",y"
<<y<<endl;
return
0;
}
(4)引用作为返回值
#include
<iostream>
using
namespace
std;
float
temp;
float
fn1(
float
r)
{
temp = r * r * 3.14;
return
temp;
}
float
& fn2(
float
r)
{
temp = r * r * 3.14;
return
temp;
}
int
main()
{
float
a = fn1(5.0);
//1
float
&b = a;
b = fn1(5.0);
// 2:warning
float
c = fn2(5.0);
//3
float
&d = c;
d = fn2(5.0);
//4
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
}
以上是引用的四种形式,但是第二种是有问题的 !
函数fn1() 是以值方式返回的,返回时,复制tmp的值给临时变量。返回到主函数后,引用b以该临时变量来初始化,使得b成为该临时变量的别名。由于临时变量的作用域短暂,所以b面临无效的危险。临时变量或对象的生命期在一个完整的语句表达式结束后便宣告结束。也就是说在“
b = fn1(5.0);
”之后,临时变量已经不存在了。所以引用b以后是个无法确定的值。
引用在作为返回值是应注意:
i.不要返回一个临时变量的引用
ii.如果返回对象出了作用域之后依旧存在,则最好使用引用返回,因为这样个人更高效。
(5)指针和引用的区别
i.引用只能在定义是被初始化一次,之后不能再重新定义;指针变量则是可变的。
ii.引用指向的必须是有效的变量;指针可以为空。
iii.指针自增(++)或自减(--)是类型的大小;
引用
自增(++)或自减(--)是数值的大小。
iv.sizeof(引用)得到的是所指向的变量的大小;
sizeof(指针)得到的是对象地址的大小。