写这篇博客的主要目的是为了巩固自己在C++的学习,主要有一下几个知识点:
1.介绍一下C++
2.为什么C++支持重载?C语言不支持–重点
3.缺省参数
4.命名空间
一.C++简介
C++简单来说,是C语言的继承,也可以说是带类的C。它是一种基于对象的程序设计语言。因为C++是由C语言发展而来,C++基本上支持C语言的一切语法,所以,C++也可面向过程编程。C++语言主要有三大特点:1.数据封装和数据隐藏;2.支持继承和重用;3.支持多态性。
二.为什么C++支持重载而C语言不支持
重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
要回答这个问题,就得了解源程序生成可执行文件的四个过程:1.预处理:进行展开头文件,宏替换,去掉注释和条件编译等处理;2.编译:检查语法的正确性,生成对应的汇编代码;3.汇编:将汇编代码转换成机器码;4.链接到一起生成可执行程序。从这四个过程中,我们知道函数在编译过程中会生成对应的汇编代码,那么这就是关键了,C++在编译过程中会对函数名进行修饰,而C语言不会。下面让我们看个栗子把:
#include<stdio.h>
void print(int i)
{
printf("%d",i);
}
void print1(char c)
{
printf("%c",c);
}
void print2(int i,char c)
{
printf("%d",i);
printf("%c",c);
}
int main()
{
return 0;
}
这两张图片是我在Linux环境下分别用gcc和g++编译上面代码生成的汇编代码。想亲自动手实验的可根据下面指令进行操作。
vim test.c //创建一个文件
//编辑代码 可用上面的代码
gcc test.c //gcc编译
objdump -S //看汇编代码
sudo yum install gcc-c++ //没装g++的 可用该指令安装
g++ test.c //g++编译
objdump -S
三:缺省参数
所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。可能有点晕,直接上代码:
//无缺省
int Add(int a,int b)
{
return a+b;
}
int main()
{
int a=2;
int b=3;
Add(a,b);//调用
return 0;
}
//全缺省
int Add(int a=1,int b=2)
{
return a+b;
}
int main()
{
Add();//不传参数调用 结果为3
Add(100);//100替换默认参数a=1;结果为102
Add(100,10);//都替换; 结果为110
reutrn 0;
}
//半缺省
int Add(int a,int b=2)
{
return a+b;
}
int main()
{
Add(10);
Add(10,20);
return 0;
}
//错误缺省
int Add(int a=1;int b)
{
return a+b;
}
四:命名空间
命名空间是用来组织和重用代码的编译单元。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
#include<iostream>
using namespace std;
namespace my
{
int a=10;
}
int main()
{
std::cout<<"hello world"<<endl;
cout<<my::a<<endl; // ::域作用符
return 0;
}