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

本文探讨了C++中方法定义与调用的注意事项,特别是关于方法放置位置的影响及编译错误的问题,并介绍了如何通过头文件和命名空间来解决方法重名导致的编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!

陈希章

原文地址:http://www.cnblogs.com/chenxizhang/archive/2009/06/05/1496626.html
原文标题:C++中方法定义和调用需要注意的一个地方
原文发表:2009/6/5 0:45:00

最近开始认真地再学一下C++的编程,陆续会有一些笔记整理出来。

今天要讲的是,C++程序中,方法之间调用的一个需要注意的地方

例如,我们有一个方法

int maxvalue(int a,int b,int c)
{
    if(a     if(a     return a;
}

我们需要在另外一个方法里面调用它

int main()
{

    int a=5,b=8,c=10;
    cout<< maxvalue(a,b,c);
    return 0;
}

 

那么请注意了,maxvalue方法是必须定义在main方法之前的,而不能在后面。

下面的代码能编译通过

#include
using namespace std;
int maxvalue(int a,int b,int c)
{
    if(a     if(a     return a;
}

int main()
{

    int a=5,b=8,c=10;
    cout<< maxvalue(a,b,c);
    return 0;
}

 

而下面的代码则会出现编译错误

#include
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     if(a     return a;
}

 

当然,也可以将该方法单独定义在一个头文件中,然后Include进来,这个机制与ASP里面是一样的

我们先将如下代码定义为common.h文件

int maxvalue(int a,int b,int c)
{
    if(a     if(a     return a;
}

然后修改原先的代码文件

#include
#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
#include "common.h"

原因在于,第一个iostream是所谓的标准库(必须用<>包含),而第二个common.h是自定义库(必须用双引号包含)

 

还有一个问题,如果此时我们的调用方也定义了一个maxvalue方法呢

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

结果会怎么样?答案是无法通过编译

image

但是,如何解决这样的问题呢?答案是可以为common.h定义一个命名空间,如下

namespace common{
int maxvalue(int a,int b,int c)
{
    if(a     if(a     return a;
}
}

 

这样的话,就可以通过下面的方式来调用该方法呢

#include
#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://blog.youkuaiyun.com/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值