C++是在C语言基础上进行开发的一种面向对象的编程语言。1983年,由贝尔实验室在C语言基础上推出了C++,C++应用广泛,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
C++的语言主要特点有支持数据封装、隐藏,支持继承和重用,支持多态性。
接下来就简单梳理一些C++的基础知识点:
1.命名空间
一个简单的C++程序为:
#include <iostream>//C++头文件
using namespace std;
int main(){
std::cout<<"hello world"<<std::endl;
return 0;
}
cout 是c++中的标准输出流对象,<< 是输出操作符;
cin 是标准输入流对象,>> 是输入操作符;
endl 是换行操作符,它们都属于c++标准库,所以都在std的名字空间内,“::”是作用域解析符。
使用“名字空间域::成员名”的格式即可访问该空间内的此成员。名字空间域的好处在于避免了与全局域命名冲突的问题,如:
namespace my{
int a=1;
}
namespace your{
int a=2;
}
my::a=3;
your::a=4;
2.缺省参数
缺省参数就是在声明函数的某个参数时,为其指定一个默认值,那么在调用该函数时若采用参数的默认值,那么就不用指定该参数。需要注意的是:调用时只能从最后一个参数进行省略。
//全缺省参数
int ADD1(int a=0,int b=2){
return a + b;
}
//半缺省参数
int ADD2(int a,int b=1){
return a + b;
}
void main(){
cout<<ADD1();//0+0=0
cout<<ADD1(2);//2+2=4
cout<<ADD1(3,1);//3+1=4
cout<<ADD2(2);//2+1=3
cout<<ADD2(2,5);//2+5=7
}
3.函数重载
函数重载指的是在C++中允许多个函数拥有相同的函数名,但它们的参数列表不同:包括参数个数、参数类型和参数顺序,只要其中有一个不同就是参数列表不同。
int ADD(int a,int b){
return a + b;
}
int ADD1(int a,double b){
return a + b;
}//参数类型不同
需要注意的一点是,c语言不支持函数重载,而c++支持,这是为什么呢?
这要从代码的编译到运行说起,函数编译过程是:
a)预处理:头文件展开、去注释、预处理、宏替换
b)编译:高级语言转为汇编代码
c)汇编:汇编语言转为二进制程序
d)链接
例:
函数1:void add(int a , int b)
在c++中,编译器在编译后该函数的名字为_add;
在c语言中,编译后为_add_int_int;
函数2:void add(double a , double b)
在c++中,编译后函数名为_add;
在c语言中,编译后为_add_double_double;
这两个函数若存在同一c语言程序中,则编译器在链接过程中会报错,因为链接是根据查找函数名进行的,而在c++环境下则不会。这就是c语言不支持函数重载的原因。