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

以加减法计算器为例,了解C++命名作用域与函数调用

*************

C++

topic: 命名作用域与函数调用

*************

The concept is fully introducted in the last artical. Please refer to 抽象:C++命名作用域与函数调用-CSDN博客

And let's make a calculator to review the basic structure in c++.

1、全局函数

A good habit to name the global function is using global_XXX.

#include <iostream>int global_add(int a, int b) // 全局函数的名字是global_add
{return a + b; // 返回a和b的和
}

2、命名空间

Like a villa, a space to name the variables.

#include <iostream>int global_add(int a, int b) // 全局函数的名字是global_add
{return a + b; // 返回a和b的和
}namespace calculate
{// do sth. here
}

call global function in namespace.

#include <iostream>int global_add(int a, int b) // 全局函数的名字是global_add
{return a + b; // 返回a和b的和
}namespace calculate
{// 调用全局函数int add(int a, int b) // 函数的名字是add{return global_add(a, b); // 返回全局函数的结果}
}

and of course you can add a function directly in namespace calculate.

#include <iostream>// 全局加法函数
int global_add(int a, int b) 
{return a + b;
}namespace calculate 
{// 1. 直接定义在命名空间中的加法函数(独立实现)int add_in_class(int a, int b) {return a + b;  // 直接实现加法}// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b) {return global_add(a, b);  // 调用全局函数}
}

Extend add class.

#include <iostream>// 全局加法函数
int global_add(int a, int b) 
{return a + b;
}namespace calculate 
{// 定义一个类addclass add{public:// 1. 直接定义在类中的加法函数(独立实现)int add_in_class(int a, int b) {return a + b;  // 直接实现加法}// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b) {return global_add(a, b);  // 调用全局函数}};
}

call the add functions in the add class is easy.

namespace calculate
{// 定义一个类addclass add{public:// 1. 直接定义在类中的加法函数(独立实现)int add_in_class(int a, int b){return a + b; // 直接实现加法}// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b){return global_add(a, b); // 调用全局函数}// 调用加法函数void call_add(int a, int b){int result1 = add_in_class(a, b); // 调用类内的加法函数int result2 = add_by_global(a, b); // 调用全局加法函数}};

extend suntract class

namespace calculate
{// 定义一个类addclass add{public:// 1. 直接定义在类中的加法函数(独立实现)int add_in_class(int a, int b){return a + b; // 直接实现加法}// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b){return global_add(a, b); // 调用全局函数}// 调用加法函数void call_add(int a, int b){int result1 = add_in_class(a, b); // 调用类内的加法函数int result2 = add_by_global(a, b); // 调用全局加法函数}};// 拓展减法的类class subtract{public:// 1. 直接定义在类中的减法函数(独立实现)int subtract_in_class(int a, int b){return a - b; // 直接实现减法}// 2. 调用全局加法函数的版本(复用全局实现)int subtract_by_global(int a, int b){return global_add(a, -b); // 调用全局函数}};
}

extend an auto calculating calss, so that program can do the adding and subtracting at the same time.

#include <iostream>// 全局加法函数
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 定义一个类addclass add{public:// 1. 直接定义在类中的加法函数(独立实现)int add_in_class(int a, int b){return a + b; // 直接实现加法}// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b){return global_add(a, b); // 调用全局函数}// 调用加法函数void call_add(int a, int b){int result1 = add_in_class(a, b); // 调用类内的加法函数int result2 = add_by_global(a, b); // 调用全局加法函数}};// 拓展减法的类class subtract{public:// 1. 直接定义在类中的减法函数(独立实现)int subtract_in_class(int a, int b){return a - b; // 直接实现减法}// 2. 调用全局加法函数的版本(复用全局实现)int subtract_by_global(int a, int b){return global_add(a, -b); // 调用全局函数}};// 执行同时调用加法和减法class autoCalculate{};

Create an object to call the function in other classes. If  you want to call functions of other class, make sure to creating an object from the class which is refreed. Do have to create an object when global function is called.

#include <iostream>// 全局加法函数
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 定义一个类addclass add{public:// 1. 直接定义在类中的加法函数(独立实现)int add_in_class(int a, int b){return a + b; // 直接实现加法}// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b){return global_add(a, b); // 调用全局函数}// 调用加法函数void call_add(int a, int b){int result1 = add_in_class(a, b); // 调用类内的加法函数int result2 = add_by_global(a, b); // 调用全局加法函数}};// 拓展减法的类class subtract{public:// 1. 直接定义在类中的减法函数(独立实现)int subtract_in_class(int a, int b){return a - b; // 直接实现减法}// 2. 调用全局加法函数的版本(复用全局实现)int subtract_by_global(int a, int b){return global_add(a, -b); // 调用全局函数}};// 执行同时调用加法和减法class autoCalculate{public:add autoAdd; // 创建一个add类的对象autoAddsubtract autoSubtract; // 创建一个subtract类的对象autoSubtractvoid call_add_subtract(int a, int b){autoAdd.add_in_class(a, b); // 调用类内的加法函数autoSubtract.subtract_in_class(a, b); // 调用类内的减法函数autoAdd.add_by_global(a, b); // 调用全局加法函数global_add(a, b); // 调用全局加法函数时不需要创建对象}};
}

Main code is compulsory. In the program, main code is the start of the system. All codes start from mian code.

#include <iostream>// 全局加法函数
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 定义一个类addclass add{public:// 1. 直接定义在类中的加法函数(独立实现)int add_in_class(int a, int b){return a + b; // 直接实现加法}// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b){return global_add(a, b); // 调用全局函数}// 调用加法函数void call_add(int a, int b){int result1 = add_in_class(a, b); // 调用类内的加法函数int result2 = add_by_global(a, b); // 调用全局加法函数}};// 拓展减法的类class subtract{public:// 1. 直接定义在类中的减法函数(独立实现)int subtract_in_class(int a, int b){return a - b; // 直接实现减法}// 2. 调用全局加法函数的版本(复用全局实现)int subtract_by_global(int a, int b){return global_add(a, -b); // 调用全局函数}};// 执行同时调用加法和减法class autoCalculate{public:add autoAdd; // 创建一个add类的对象autoAddsubtract autoSubtract; // 创建一个subtract类的对象autoSubtractvoid call_add_subtract(int a, int b){autoAdd.add_in_class(a, b); // 调用类内的加法函数autoSubtract.subtract_in_class(a, b); // 调用类内的减法函数autoAdd.add_by_global(a, b); // 调用全局加法函数global_add(a, b); // 调用全局加法函数时不需要创建对象}};// 主函数是程序的入口,所有的程序都从这里开始执行int main(){int a = 13;int b = 38;global_add(a, b); // 调用全局加法函数,return 51// 调用calculate命名空间中的add类calculate::add myAdd; // 创建一个add类的对象myAddmyAdd.add_in_class(a, b); // 调用类内的加法函数,return 51myAdd.add_by_global(a, b); // 调用全局加法函数,return 51// 调用calculate命名空间中的subtract类calculate::subtract mySubtract; // 创建一个subtract类的对象mySubtractmySubtract.subtract_in_class(a, b); // 调用类内的减法函数,return -25mySubtract.subtract_by_global(a, b); // 调用全局加法函数,return -25// 调用calculate命名空间中的autoCalculate类calculate::autoCalculate myAutoCalculate; // 创建一个autoCalculate类的对象myAutoCalculatemyAutoCalculate.call_add_subtract(a, b); // 调用类内的加法和减法函数, return 51和-25return 0; // 返回0表示程序正常结束}
}

Head file is a good way to tear the code apart. In the file, too much code puzzles angineer. So one file does only one thing. Head file difine the functions and variables. Source files declare the functions. 

头文件 calculator.h

#ifndef CALCULATOR_H
#define CALCULATOR_H#include <iostream>// 全局加法函数
int global_add(int a, int b);namespace calculate
{// 定义一个类addclass add{public:// 1. 直接定义在类中的加法函数(独立实现)int add_in_class(int a, int b);// 2. 调用全局加法函数的版本(复用全局实现)int add_by_global(int a, int b);// 调用加法函数void call_add(int a, int b);};// 拓展减法的类class subtract{public:// 1. 直接定义在类中的减法函数(独立实现)int subtract_in_class(int a, int b);// 2. 调用全局加法函数的版本(复用全局实现)int subtract_by_global(int a, int b);};// 执行同时调用加法和减法class autoCalculate{public:add autoAdd; // 创建一个add类的对象autoAddsubtract autoSubtract; // 创建一个subtract类的对象autoSubtractvoid call_add_subtract(int a, int b);};
}#endif // CALCULATOR_H

源文件 calculator.cpp

#include "calculator.h"// 全局加法函数实现
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// add类方法实现int add::add_in_class(int a, int b){return a + b;}int add::add_by_global(int a, int b){return global_add(a, b);}void add::call_add(int a, int b){int result1 = add_in_class(a, b);int result2 = add_by_global(a, b);}// subtract类方法实现int subtract::subtract_in_class(int a, int b){return a - b;}int subtract::subtract_by_global(int a, int b){return global_add(a, -b);}// autoCalculate类方法实现void autoCalculate::call_add_subtract(int a, int b){autoAdd.add_in_class(a, b);autoSubtract.subtract_in_class(a, b);autoAdd.add_by_global(a, b);global_add(a, b);}
}

主程序 main.cpp

#include "calculator.h"int main()
{int a = 13;int b = 38;global_add(a, b); // 调用全局加法函数,return 51// 调用calculate命名空间中的add类calculate::add myAdd; // 创建一个add类的对象myAddmyAdd.add_in_class(a, b); // 调用类内的加法函数,return 51myAdd.add_by_global(a, b); // 调用全局加法函数,return 51// 调用calculate命名空间中的subtract类calculate::subtract mySubtract; // 创建一个subtract类的对象mySubtractmySubtract.subtract_in_class(a, b); // 调用类内的减法函数,return -25mySubtract.subtract_by_global(a, b); // 调用全局加法函数,return -25// 调用calculate命名空间中的autoCalculate类calculate::autoCalculate myAutoCalculate; // 创建一个autoCalculate类的对象myAutoCalculatemyAutoCalculate.call_add_subtract(a, b); // 调用类内的加法和减法函数, return 51和-25return 0; // 返回0表示程序正常结束
}

相关文章:

  • 词向量(Word Embedding)深度解析
  • iPaaS集成平台技术选型关注哪些指标?
  • TCP网络编程学习
  • 【JAVA】中文我该怎么排序?
  • 豪越智能仓储:为消防应急物资管理“上锁”
  • PyTorch进阶实战指南:02分布式训练深度优化
  • 使用Tkinter写一个发送kafka消息的工具
  • 如何从 iPhone 获取照片:5 个有效解决方案
  • 【鸿蒙开发】Hi3861学习笔记-DHT11温湿度传感器
  • window 显示驱动开发-设置内存分配的大小和间距
  • Redis Cluster动态扩容:架构原理与核心机制解析
  • 03-Web后端基础(Maven基础)
  • 牛客网 NC16407 题解:托米航空公司的座位安排问题
  • 《深度学习入门》第2章 感知机
  • 基于Resnet-34的树叶分类(李沐深度学习基础竞赛)
  • 【AI News | 20250521】每日AI进展
  • 【图数据库】--Neo4j 安装
  • opencv的图像卷积
  • opencv_version_win32
  • 【面经分享】微派网络一面
  • 衡水企业做网站费用/发外链比较好的平台
  • cms网站/专业竞价托管哪家好
  • 政府网站开发要求/关键词搜索量查询工具
  • 武汉手机网站设计如何/网站seo查询工具
  • 政府门户网站内容建设/业务网站制作
  • 微信公众号的微网站开发/优化法治化营商环境