快速业务通道

C++中方法定义和调用需要注意的一个地方

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

最近开始认真地再学一下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;
}

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;
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号