当前位置: 首页 > news >正文

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

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

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

image

但是,如何解决这样的问题呢?答案是可以为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;
}

相关文章:

  • 在局域网里上网时总是弹出宽带连接的窗口
  • ExtJS学习之ComboBox
  • 书签
  • 如何实现以root身份telnet连接rhel服务器?
  • mhdd应用详解-入门篇(图文教程)
  • 菜鸟学Linux之六:samba服务的搭建与部署
  • Netcat
  • 表达式求值组件Jeval
  • “U盘大盗”让你的U盘防不胜防###
  • 我的耳朵
  • [转载]【Java EE】Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架 整合开发
  • 关于SQL SERVER 日志满的处理方法
  • CCNA系列课程(7)访问控制列表ACL
  • 微软的虚拟化
  • 批量改名
  • ES6指北【2】—— 箭头函数
  • [译] React v16.8: 含有Hooks的版本
  • [译]CSS 居中(Center)方法大合集
  • 08.Android之View事件问题
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • C++类中的特殊成员函数
  • CSS实用技巧干货
  • CSS相对定位
  • HTML中设置input等文本框为不可操作
  • Java 网络编程(2):UDP 的使用
  • Java超时控制的实现
  • js递归,无限分级树形折叠菜单
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tensorflow学习笔记3——MNIST应用篇
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue.js 移动端适配之 vw 解决方案
  • 阿里云购买磁盘后挂载
  • 聊一聊前端的监控
  • 前端面试之CSS3新特性
  • 数组大概知多少
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 从如何停掉 Promise 链说起
  • 数据库巡检项
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​flutter 代码混淆
  • ​水经微图Web1.5.0版即将上线
  • #在 README.md 中生成项目目录结构
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $().each和$.each的区别
  • (1)(1.13) SiK无线电高级配置(六)
  • (14)Hive调优——合并小文件
  • (2)Java 简介
  • (ros//EnvironmentVariables)ros环境变量
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .Net MVC + EF搭建学生管理系统
  • .net 按比例显示图片的缩略图
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖