C++中要领界说和挪用需要留意的一个处所
副标题#e#
最近开始当真地再学一下C++的编程,连续会有一些条记整理出来。
本日要讲的是,C++措施中,要领之间挪用的一个需要留意的处所
譬喻,我们有一个要领
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
我们需要在别的一个要领内里挪用它
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
那么请留意了,maxvalue要领是必需界说在main要领之前的,而不能在后头。
下面的代码能编译通过
#include <iostream>
using namespace std;
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
而下面的代码则会呈现编译错误
#include <iostream>
using namespace std;
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
虽然,也可以将该要领单独界说在一个头文件中,然后Include进来,这个机制与ASP内里是一样的
我们先将如下代码界说为common.h文件
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
然后修改原先的代码文件
#include <iostream>
#include "common.h"
using namespace std;
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
#p#副标题#e#
include这个指令其实就相当于是将common.h的内容插入到当前cpp文件的顶部。
那么,为什么同样是include,但有两种写法呢?
#include <iostream>
#include "common.h"
原因在于,第一个iostream是所谓的尺度库(必需用<>包括),而第二个common.h是自界说库(必需用双引号包括)
尚有一个问题,假如此时我们的挪用方也界说了一个maxvalue要领呢
#include <iostream>
#include "common.h"
using namespace std;
int maxvalue(int a,int b,int c)
{
return c;
}
int main()
{
int a=5,b=8,c=10;
cout<< maxvalue(a,b,c);
return 0;
}
功效会怎么样?谜底是无法通过编译
可是,如何办理这样的问题呢?谜底是可觉得common.h界说一个定名空间,如下
namespace common{
int maxvalue(int a,int b,int c)
{
if(a<b) a=b;
if(a<c) a=c;
return a;
}
}
这样的话,就可以通过下面的方法来挪用该要领呢
#include <iostream>
#include "common.h"
using namespace std;//这是导入定名空间的语法,与C#是纷歧样的,多了一个非凡的namespace要害字
int maxvalue(int a,int b,int c)
{
return c;
}
int main()
{
int a=5,b=8,c=10;
cout<< common::maxvalue(a,b,c);//挪用common.h中的maxvalue要领,用两个冒号暗示定名空间限定符,这与C#也纷歧样
cout << endl;
cout << maxvalue(a,b,c);//这是挪用本身界说的maxvalue要领
return 0;
}