以加减法计算器为例,了解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.pswp.cn/web/81193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC小程序项目

一、文生文功能 &#xff08;1&#xff09;前端部分 使用 Pinia 状态管理库创建的聊天机器人消息存储模块&#xff0c;它实现了文生文&#xff08;文本生成文本&#xff09;的核心逻辑。 1.Pinia状态管理 这个模块管理两个主要状态&#xff1a; messages&#xff1a;存储所…

Axios中POST、PUT、PATCH用法区别

在 Axios 中&#xff0c;POST、PUT 和 PATCH 是用于发送 HTTP 请求的三种不同方法&#xff0c;它们的核心区别源自 HTTP 协议的设计语义。以下是它们的用法和区别&#xff1a; 1. POST 语义&#xff1a;用于创建新资源。 特点&#xff1a; 非幂等&#xff08;多次调用可能产生…

[爬虫知识] Cookie与Session

相关实战案例&#xff1a;[爬虫实战] 爬取小说标题与对应内容 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 一、引入场景 在http协议中&#xff0c;浏览器是无状态&#xff08;即无记忆&#xff09;的&#xff0c;对于请求与响应的产生数据&#…

怎样改变中断优先级?

在STM32中改变中断优先级可以通过STM32CubeMX配置和代码中设置两种方式来实现。以下以STM32F1系列为例进行说明: 使用STM32CubeMX配置 打开工程:在STM32CubeMX中打开你的工程。进入NVIC配置:在Pinout & Configuration选项卡中,点击NVIC进入中断向量控制器配置界面。选…

科学计算中的深度学习模型精解:CNN、U-Net 和 Diffusion Models

关键要点 模型概述:卷积神经网络(CNN)、U-Net 和 Diffusion Models 是深度学习中的核心模型,广泛应用于科学计算任务,如偏微分方程(PDE)求解、图像分割和数据生成。科学计算应用:CNN 可用于高效求解 PDEs,U-Net 擅长医学图像分割和材料分析,Diffusion Models 在生成合…

解决Docker无法拉取镜像问题:Windows系统配置镜像加速全指南

问题背景 在使用 Docker 时&#xff0c;你是否遇到过以下报错&#xff1f; Unable to find image ‘mysql:latest’ locally docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: dial tcp 128.242.250.155:443: i/o timeout. 这类问题通常是由于…

Spring AI 使用教程

Spring AI 使用教程&#xff08;2025年5月24日更新&#xff09; 一、环境搭建与项目初始化 创建Spring Boot项目 使用IDEA或Spring Initializr创建项目&#xff0c;选择JDK 17或更高版本&#xff08;推荐21&#xff09;。勾选依赖项&#xff1a;Spring Web、Lombok&#xff0c;…

iOS 直播特殊礼物特效实现方案(Swift实现,超详细!)

特殊礼物特效是提升直播互动体验的关键功能&#xff0c;下面我将详细介绍如何在iOS应用中实现各种高级礼物特效。 基础特效类型 1.1 全屏动画特效 class FullScreenAnimationView: UIView {static func show(with gift: GiftModel, in view: UIView) {let effectView FullS…

分布式事务之Seata

概述 Seata有四种模式 AT模式&#xff1a;无侵入式的分布式事务解决方案&#xff0c;适合不希望对业务进行改造的场景&#xff0c;但由于需要添加全局事务锁&#xff0c;对影响高并发系统的性能。该模式主要关注多DB访问的数据一致性&#xff0c;也包括多服务下的多DB数据访问…

信息收集与搜索引擎

6.1 常见的搜索引擎&#xff08;一、二&#xff09; 6.1.1 通用搜索引擎 Google/Bing&#xff1a; 用途&#xff1a;基础信息收集&#xff08;域名、子域名、敏感文件&#xff09;。 高级语法&#xff1a; site:target.com&#xff1a;限定搜索目标域名。 filetype:pdf&am…

【Java项目测试报告】:在线聊天平台(Online-Chat)

被测试项目已部署&#xff1a;登录页面http://123.249.78.82:8080/login.html 一、项目背景 1.1 测试目标 验证系统功能完整性&#xff0c;确保用户管理、消息传输、好友管理等核心模块符合需求。 1.2 项目技术栈 后端&#xff1a;Spring Boot/Spring MVC/WebSocket 数据…

RAGFlow与Dify的深度刨析

目录 一、RAGFlow 框架 二、Dify 框架 三、两者集成 四、深度对比 1. 核心定位对比 2. 核心功能对比 3. 技术架构对比 4. 部署与成本 5. 适用场景推荐 总结 一、RAGFlow 框架 RAGFlow 是一个专注于深度文档理解和检索增强生成&#xff08;RAG&#xff09;技术的框架…

CQF预备知识:一、微积分 -- 1.2.2 函数f(x)的类型详解

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 &#x1f4d6; 数学入门全解 本系列教程为CQF(国际量化金融分析师证书)认证所需的数学预备知识&#xff0c;涵盖所有需要了解的数学基础知识…

嵌入式工程师常用软件

1、 Git Git 是公司常用的版本管理工具&#xff0c;人人都要会。在线的 git 教程可以参考菜鸟教程&#xff1a; https://www.runoob.com/git/git-tutorial.html 电子书教程请在搜索栏搜索&#xff1a; git Git 教程很多&#xff0c;常用的命令如下&#xff0c;这些命令可…

TReport组件指南总结

1. TReport 组件简介 TReport 是一个用于生成和打印报表的组件,通常用于连接数据集(如 TDataSet)并设计复杂的报表布局。它支持动态数据绑定、多页报表、分组统计、图表插入等功能。 2. 安装与配置 安装:如果使用的是第三方报表工具(如 Rave Reports),需在 Delphi 中通…

spark任务的提交流程

目录 spark任务的提交流程1. 资源申请与初始化2. 任务划分与调度3. 任务执行4. 资源释放与结果处理附:关键组件协作示意图扩展说明SparkContext介绍 spark任务的提交流程 用户创建一个 Spark Context;Spark Context 去找 Cluster Manager 申请资源同时说明需要多少 CPU 和内…

【C++】C++异步编程四剑客:future、async、promise和packaged_task详解

C异步编程四剑客&#xff1a;future、async、promise和packaged_task详解 1. 引言 1.1 异步编程的重要性 在现代C编程中&#xff0c;异步操作是提高程序性能和响应能力的关键技术。它允许程序在等待耗时操作&#xff08;如I/O、网络请求或复杂计算&#xff09;完成时继续执行…

2021-10-28 C++判断完全平方数

缘由判断一个整数是否为完全平方数-编程语言-CSDN问答 整数用平方法小数用5分法逼近。 int 判断平方数(int n) {//缘由https://ask.csdn.net/questions/7546950?spm1005.2025.3001.5141int a 1;while (a < n / a)if (a*a < n)a;else if (a*a n)return 1;elsereturn 0…

解决weman框架redis报错:Class “llluminatelRedis\RedisManager“ not found

解决weman框架redis报错&#xff1a;Class "llluminatelRedis\RedisManager" not found 报错解决方案 报错 解决方案 按照手册执行 composer require psr/container ^1.1.1 illuminate/redis illuminate/events 安装redis组件 然后restart重启就行了 php webman s…

Windows 11 电源计划进阶——通过异类策略优化大小核CPU调度

一、为什么需要手动控制大小核调度&#xff1f; 1.1 Intel 12/13/14代酷睿与Win11的适配现状 Intel 12代酷睿首次引入混合架构设计&#xff08;P-Core性能核 E-Core能效核&#xff09;&#xff0c;Windows 11虽然原生支持线程调度器&#xff08;Thread Director&#xff09;…