当前位置: 首页 > 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表示程序正常结束
}

http://www.xdnf.cn/news/574507.html

相关文章:

  • Vue3使用DataV报错无法使用的解决方案
  • 使用allure生成自动化测试报告
  • 通过TDE透明加密实现SQL Server数据库免改造加密
  • 反弹shell
  • MySQL临时表和内存表
  • C11 日期时间处理案例
  • AtCoder 第406场初级竞赛 A~E题解
  • 学习黑客了解密码学
  • Coze工作流-变量以及变量的类型讲解
  • 最新版Chrome浏览器调用ActiveX控件之eDrawings Viewer专用包v2.0.42版本发布
  • 【AI流程应用】智能知识库搭建与实战应用
  • RK3588 RKNN ResNet50推理测试
  • Spring 定时器和异步线程池 实践指南
  • COMP3023 Design and Analysis of Algorithms
  • ./build/mkfs.jffs2: Command not found
  • 车载诊断架构 --- LIN 节点 ECU 故障设计原则
  • C++继承:从生活实例谈面向对象的精髓
  • 零基础设计模式——创建型模式 - 生成器模式
  • 时源芯微|六大步骤解决EMC问题
  • RAG系统的现实困境与突破:数据泥潭到知识自由
  • QT的自定义控件
  • 【题解-洛谷】B4302 [蓝桥杯青少年组省赛 2024] 出现奇数次的数
  • 数据库——redis
  • 测试--自动化测试概念
  • java21
  • BISS0001:高性能热释电红外感应IC的详细介绍
  • 学习STC51单片机10(芯片为STC89C52RC)
  • 近场探头阵列技术解析
  • (eNSP)主备接口备份配置
  • BitsAndBytesConfig参数描述