以加減法計算器為例,了解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
繁體地址,請注明出處:http://hk.pswp.cn/web/81193.shtml
英文地址,請注明出處:http://en.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;…