今天简单的介绍一下C++的入门基础知识,包括C++代码的基础以及指针与引用。
1、命名空间
命名空间用花括号将文件代码的一部分括起来,变成一个域。用namespace关键字开头组成名字,类似于类的命名。
namespace name1
{
int i=0;
}
使用命名空间中的元素时要使用作用域解析符:::,例如
name1::i=4
在编写C++代码时,我们需要在代码之前使用std命名空间,因为标准C++库是在std命名空间中被定义的。
所以编写代码有两种方式(1)在代码最前面加上using namespace std;
(2)在代码中使用std::来使用C++库中的成员
对于命名空间的详细介绍参见:http://blog.chinaunix.net/uid-26404477-id-3088450.html
下面举一个简单的C++代码例子
#include<iostream>
using namespace std;
int main()
{
int i = 4;
cout << "i=" << i << endl;
system("pause");
return 0;
}
2、C++基本的输出输入流
cout是标准输出流对象,<< 是输出操作符;
cin是标准输入流对象,>>是输入操作符;
endl是换行操作符;
他们都属于C++标准库,所以都在std的名字空间里面。
上面那个例子就运用了cout和<<。C++中的cin和cout类似于C中的scanf和printf,但运用有所不同。
格式化出入与输出详见:http://c.biancheng.net/cpp/biancheng/view/2227.html
3、C++中的重载
重载是指在同一作用域中,函数名相同,函数参数不同(类型不同或个数不同),与函数返回值无关。
#include<iostream>
using namespace std;
void fun(int a, int b);
void fun(float a, int b);
void fun(int a, int b, int c);
int main()
{
int i = 4;
cout << "i=" << i << endl;
system("pause");
return 0;
}
C中不能重载函数,但是C++却可以,是因为C++的函数命名有一套自己得标准,并不仅仅依靠自己设定的函数名,而是与函数参数类型以及函数参数个数有关。
C++代码编译中编译器自动生成函数名再运行。
详细介绍可以打开链接:http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html
4、C++缺省参数
C++中编写函数可以运用缺省参数,即在函数参数处给出参数值。
(1)全缺省参数
void fun(int a=4,int b=5)(2)半缺省参数
{
return a+b;
}
void fun(int a, int b=5)
{
return a+b;
}
函数中如果有缺省参数,要么全缺省,要么半缺省,半缺省时只能缺省右边的参数,而且要参数连续,下面这两个函数参数是错误的。
5、指针和引用
引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。
定义的格式为:
类型 &引用变量名 = 已定义过的变量名;
引用的特点:
a. 一个变量可取多个别名
b. 引用必须初始
c. 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
int main()在上述程序中,j是i的引用,即j是i的别名。
{
int i=5;
int &j=i;
return 0;
}
(1)引用可以做参数,可以提高效率,可以在函数内部改变变量的值。
const可以修饰引用:
(2)引用可以做返回值,在我的博客C++函数优化中有提到:http://blog.csdn.net/zoctopusd/article/details/74157214
引用做返回值时,返回的是别名,即临时拷贝,可以提高效率,但是也要小心使用,以下几种情况需要注意:
a.当变量为局部变量,即出了作用域不存在时,不能返回引用
b.当局部变量用static修饰时可以返回引用
c.临时变量不能返回引用
(3)引用与指针的区别与联系
a. 引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。
b. 引用必须指向有效的变量,指针可以为空。
c. sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
d. 指针和引用自增(++)自减(--)意义不一样。
e. 相对而言,引用比指针更安全。
总结一下:
指针比引用更灵活,但是也更危险。使用指针时一定要注意检查指针是否为空。指针所指的地址释放以后最好置0,否则可能存在野指针
问题。