C++ 寫一個簡單的加減法計算器

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

C++

topic:結構

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

Structure is a very intersting issue. I really don't like concepts as it is boring. I would like to cases instead. If I want to learn something, donot hesitate to make shits.?

Like building a house. When I was at school my dream is to bought a flat in the very top of the building. I stand by the big floor-to-ceiling window watching outside, colourful and busy. The traffic flows and shining neon are the breathes of the city. It has no relation with the structure of the code so forget it. When building the house, structure always comes significant.

Then add some elements and it will superise you.

?

So I will do some shit first. Here is the beginning of the caculator.

#include <iostream>  // 包含輸入輸出流庫int main()
{ // 主函數,程序的起點return 0; // 程序正常結束
}

So think about the work flow, which is the structure of the code.

  1. 提示用戶輸入兩個整數。
  2. 讀取用戶輸入,并檢查輸入是否有效。
  3. 如果輸入無效,給出錯誤提示。
  4. 計算加法和減法的結果。
  5. 輸出結果。

And the first thing is input twonumbers:

#include <iostream>int main()
{"請輸入第一個整數: ";"請輸入第二個整數: ";return 0;
}

?


Introduce the new friend, namespace. Pay special attention to the line here. Every time the line comes first, a new friend comes second.

namespace 就是 避免命名沖突,舉個例子,我叫“ElseWhereR”,在‘學校’這個命名空間,ElseWhereR是校草。在‘公司’這個命名空間中,ElseWhereR是董事長。ElseWhereR是同一個人,但是在不同的命名空間中可以獨立,不會互相干擾。

我寫的第一個程序,hello world:

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;return 0;
}

?

But, 我在抄這段代碼的時候, std:: 這個我要經常寫,非常的繁瑣。這個時候就要介紹 namespace這個非常友好的朋友了。這個的作用就是告訴程序,我要自己起名字了。這個的用法如下:

using namespace  xjbName;

如果將這項黑科技用在代碼中,?在 C++ 中,標準庫的所有符號(如 coutcin 等)都包含在 std 命名空間中。但是值得注意的是,namespace的名字是可以隨便取的, using 也是可以省略的。

#include <iostream>
using namespace std;int main() {cout << "Hello, World!" << endl;return 0;
}

經常寫代碼的都知道,需要告訴計算機數字的類型,這里直接 int,整數的意思:

#include <iostream>int main() {int num1, num2;std::cout << "請輸入第一個整數: ";std::cin >> num1;std::cout << "請輸入第二個整數: ";std::cin >> num2;int sum = num1 + num2;int difference = num1 - num2;std::cout << "加法結果: " << sum << std::endl;std::cout << "減法結果: " << difference << std::endl;return 0;
}

std::cout <<

std::cin >>

標準用法,完整意思是:

standard:: control output <<

standard:: control intput >>

兩個冒號代表,cout屬于std里面的一個成員。


注意,開始實戰。

將命名空間和主函數分開。這個是一個很好的習慣。

  • 命名空間內代碼:可以將具體的功能實現和數據定義組織在一起,方便維護和優化相關功能。
  • 主函數:保持簡潔,只負責程序的啟動和核心流程控制,使得代碼結構清晰。

進一步保持代碼的優雅,可以將命名空間中的代碼實現方法分離出來。

命名空間只定義變量的類型:

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義兩個整數變量int num1, num2;
}

接下來,寫一個函數,實現求和、求差的實現方法:

// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義兩個整數變量int num1, num2;
}// 在命名空間外實現函數 calculate
void calculate()
{int sum = JiSuanQi::num1 + JiSuanQi::num2;int difference = JiSuanQi::num1 - JiSuanQi::num2;std::cout << "加法結果: " << sum << std::endl;std::cout << "減法結果: " << difference << std::endl;
}

這里,void是固定格式,表示不返回任何東西,只是執行一些操作。

最后,寫出主程序。

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義兩個整數變量int num1, num2;
}// 在命名空間外實現函數 calculate
void calculate()
{int sum = JiSuanQi::num1 + JiSuanQi::num2;int difference = JiSuanQi::num1 - JiSuanQi::num2;std::cout << "加法結果: " << sum << std::endl;std::cout << "減法結果: " << difference << std::endl;
}// 主函數
int main()
{using namespace JiSuanQi;std::cout << "請輸入第一個整數: ";std::cin >> num1;std::cout << "請輸入第二個整數: ";std::cin >> num2;calculate();return 0;
}

最后輸出的結果是:


還有一個好玩的,如果另一個程序也想使用加減法,但是他不想再寫一遍函數,那么就需要使用 類。既然外部文件想使用這個方法,那么就得定義這個構造函數為 public。

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義類 Calculatorclass Calculator{public:int num1; // 第一個整數int num2; // 第二個整數// 構造函數Calculator(int a, int b) : num1(a), num2(b) {}// 計算加法和減法void calculate() const{int sum = num1 + num2;int difference = num1 - num2;std::cout << "加法結果: " << sum << std::endl;std::cout << "減法結果: " << difference << std::endl;}};
}

值得注意的是,構造函數的名字,和類的名字得保持一致。如果不一致,會發生編譯錯誤。

這里的一個語法知識,用來初始化:

  • Calculator(int a, int b):這是一個 構造函數,其作用是初始化類 Calculator 的對象。
  • 參數列表 (int a, int b) 表示該構造函數接受兩個整數參數 ab

  • : num1(a), num2(b):這是 初始化列表,用于在創建對象時初始化類的成員變量。??
  • num1(a) 表示將成員變量 num1 的值初始化為參數 a
  • num2(b) 表示將成員變量 num2 的值初始化為參數 b

  • {}:表示構造函數的函數體。在這個例子中,函數體為空,因為所有的初始化工作都已經在初始化列表中完成。即使為空,花括號也不能省略。

?

如果你只希望別的程序調用你的計算,你想把num1和num2保護起來,那就加一個 private。

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義類 Calculatorclass Calculator{private:int num1; // 第一個整數int num2; // 第二個整數public:// 構造函數Calculator(int a, int b) : num1(a), num2(b) {}// 計算加法和減法void calculate() const{int sum = num1 + num2;int difference = num1 - num2;std::cout << "加法結果: " << sum << std::endl;std::cout << "減法結果: " << difference << std::endl;}};
}

主函數只要進行一點點改變就OK:

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義類 Calculatorclass Calculator{private:int num1; // 第一個整數int num2; // 第二個整數public:// 構造函數Calculator(int a, int b) : num1(a), num2(b) {}// 計算加法和減法void calculate() const{int sum = num1 + num2;int difference = num1 - num2;std::cout << "加法結果: " << sum << std::endl;std::cout << "減法結果: " << difference << std::endl;}};
}// 主函數
int main()
{int num1, num2;std::cout << "請輸入第一個整數: ";std::cin >> num1;std::cout << "請輸入第二個整數: ";std::cin >> num2;// 使用命名空間 JiSuanQi 中的 Calculator 類JiSuanQi::Calculator calc(num1, num2);calc.calculate();return 0;
}


在實際的工作中,類只進行計算,職責單一化。

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義類 Calculatorclass Calculator{public:// 構造函數Calculator(int a, int b) : num1(a), num2(b) {}// 計算加法和減法void calculate(){sum = num1 + num2;difference = num1 - num2;}
}

那么,怎么獲取計算結果呢?

int getSum() { return sum; }
  1. int getSum()

    • 這是一個成員函數聲明。

    • 返回類型是 int,表示該函數返回一個整數值。

    • 函數名是 getSum,表示該函數用于獲取某個值。

  2. { return sum; }

    • 函數體。

    • 表示該函數的實現是直接返回成員變量 sum 的值。

老鳥程序員會使用 constant,這個是固定搭配,記住只引用不改變:

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義類 Calculatorclass Calculator{public:// 構造函數Calculator(int a, int b) : num1(a), num2(b) {}// 計算加法和減法void calculate(){sum = num1 + num2;difference = num1 - num2;}// 獲取計算結果int getSum() const { return sum; }int getDifference() const { return difference; }private:int num1;       // 第一個整數int num2;       // 第二個整數int sum;        // 加法結果int difference; // 減法結果};
}

主函數需要?使用命名空間 JiSuanQi 中的 Calculator 類。注意,主函數在使用類中的構造函數的時候,需要對構造函數聲明一個對象。具體的在 函數 中有講到。

C++ 函數-CSDN博客https://blog.csdn.net/ElseWhereR/article/details/145371006?spm=1001.2014.3001.5501

#include <iostream>// 定義命名空間 JiSuanQi
namespace JiSuanQi
{// 定義類 Calculatorclass Calculator{public:// 構造函數Calculator(int a, int b) : num1(a), num2(b) {}// 計算加法和減法void calculate(){sum = num1 + num2;difference = num1 - num2;}// 獲取計算結果int getSum() const { return sum; }int getDifference() const { return difference; }private:int num1;       // 第一個整數int num2;       // 第二個整數int sum;        // 加法結果int difference; // 減法結果};
}// 主函數
int main()
{int num1, num2;std::cout << "請輸入第一個整數: ";std::cin >> num1;std::cout << "請輸入第二個整數: ";std::cin >> num2;// 使用命名空間 JiSuanQi 中的 Calculator 類JiSuanQi::Calculator calc(num1, num2);calc.calculate();// 在類外部輸出結果std::cout << "加法結果: " << calc.getSum() << std::endl;std::cout << "減法結果: " << calc.getDifference() << std::endl;return 0;
}

對象調用構造函數,只需要加個 . 就OK。

    calc.calculate();


一般來說,在一個項目中,將 類的定義?和 類的實現 放在同一份文件中,也就是 頭文件。

我將類的定義和類的實現保存為?Calculator.h 文件:

#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <iostream>namespace JiSuanQi {class Calculator {public:// 構造函數Calculator(int a, int b) : num1(a), num2(b) {}// 計算加法和減法void calculate() {sum = num1 + num2;difference = num1 - num2;}// 獲取計算結果int getSum() const { return sum; }int getDifference() const { return difference; }private:int num1;       // 第一個整數int num2;       // 第二個整數int sum;        // 加法結果int difference; // 減法結果};
}#endif // CALCULATOR_H

那么這個天才的計算邏輯如果斯嘉麗也想使用,那么她在寫代碼的時候,只需要加上一句話:

#include "Calculator.h"int main() {int num1, num2;std::cout << "請輸入第一個整數: ";std::cin >> num1;std::cout << "請輸入第二個整數: ";std::cin >> num2;// 創建 Calculator 對象并調用方法JiSuanQi::Calculator calc(num1, num2);calc.calculate();// 輸出結果std::cout << "加法結果: " << calc.getSum() << std::endl;std::cout << "減法結果: " << calc.getDifference() << std::endl;return 0;
}

很棒,我大概理解C++的邏輯了。

新年快樂。? ? ? ? ? ? ? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67205.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

excel如何查找一個表的數據在另外一個表是否存在

比如“Sheet1”有“張三”、“李四”“王五”三個人的數據&#xff0c;“Sheet2”只有“張三”、“李四”的數據。我們通過修改“Sheet1”的“民族”或者其他空的列&#xff0c;修改為“Sheet2”的某一列。這樣修改后篩選這個修改的列為空的或者為出錯的&#xff0c;就能找到兩…

MySQL 基礎學習(2): INSERT 操作

在這篇文章中&#xff0c;我們將專注于 MySQL 中的 INSERT 操作&#xff0c;深入了解如何高效地向表中插入數據&#xff0c;并探索插入操作中的一些常見錯誤與解決方案。 一、基礎 INSERT 語法 在 MySQL 中&#xff0c;INSERT 操作用于向表中插入新記錄&#xff0c;基本語法如…

CVE-2023-38831 漏洞復現:win10 壓縮包掛馬攻擊剖析

目錄 前言 漏洞介紹 漏洞原理 產生條件 影響范圍 防御措施 復現步驟 環境準備 具體操作 前言 在網絡安全這片沒有硝煙的戰場上&#xff0c;新型漏洞如同隱匿的暗箭&#xff0c;時刻威脅著我們的數字生活。其中&#xff0c;CVE - 2023 - 38831 這個關聯 Win10 壓縮包掛…

論文閱讀(二):理解概率圖模型的兩個要點:關于推理和學習的知識

1.論文鏈接&#xff1a;Essentials to Understand Probabilistic Graphical Models: A Tutorial about Inference and Learning 摘要&#xff1a; 本章的目的是為沒有概率圖形模型背景或沒有深入背景的科學家提供一個高級教程。對于更熟悉這些模型的讀者&#xff0c;本章將作為…

記錄 | 基于Docker Desktop的MaxKB安裝

目錄 前言一、MaxKBStep 1Step2 二、運行MaxKB更新時間 前言 參考文章&#xff1a;如何利用智譜全模態免費模型&#xff0c;生成大家都喜歡的圖、文、視并茂的文章&#xff01; MaxKB的Github下載地址 參考視頻&#xff1a;【2025最新MaxKB教程】10分鐘學會一鍵部署本地私人專屬…

Go反射指南

概念&#xff1a; 官方對此有個非常簡明的介紹&#xff0c;兩句話耐人尋味&#xff1a; 反射提供一種讓程序檢查自身結構的能力反射是困惑的源泉 第1條&#xff0c;再精確點的描述是“反射是一種檢查interface變量的底層類型和值的機制”。 第2條&#xff0c;很有喜感的自嘲…

第26篇 基于ARM A9處理器用C語言實現中斷<二>

Q&#xff1a;基于ARM A9處理器怎樣編寫C語言工程&#xff0c;使用按鍵中斷將數字顯示在七段數碼管上呢&#xff1f; A&#xff1a;基本原理&#xff1a;主程序需要首先調用子程序set_A9_IRQ_stack()初始化IRQ模式的ARM A9堆棧指針&#xff1b;然后主程序調用子程序config_GIC…

基于GS(Gaussian Splatting)的機器人Sim2Real2Sim仿真平臺

項目地址&#xff1a;RoboGSim 背景簡介 已有的數據采集方法中&#xff0c;遙操作&#xff08;下左&#xff09;是數據質量高&#xff0c;但采集成本高、效率低下&#xff1b;傳統仿真流程成本低&#xff08;下右&#xff09;&#xff0c;但真實度&#xff08;如紋理、物理&…

「 機器人 」利用沖程對稱性調節實現仿生飛行器姿態與方向控制

前言 在仿生撲翼飛行器中,通過改變沖程對稱性這一技術手段,可以在上沖與下沖兩個階段引入不對稱性,進而產生額外的力或力矩,用于實現俯仰或其他姿態方向的控制。以下從原理、在仿生飛行器中的應用和典型實驗示例等方面進行梳理與闡述。 1. 沖程對稱性原理 1.1 概念:上沖與…

MongoDB部署模式

目錄 單節點模式&#xff08;Standalone&#xff09; 副本集模式&#xff08;Replica Set&#xff09; 分片集群模式&#xff08;Sharded Cluster&#xff09; MongoDB有多種部署模式&#xff0c;可以根據業務需求選擇適合的架構和部署方式。 單節點模式&#xff08;Standa…

微服務搭建----springboot接入Nacos2.x

springboot接入Nacos2.x nacos之前用的版本是1.0的&#xff0c;現在重新搭建一個2.0版本的&#xff0c;學如逆水行舟&#xff0c;不進則退&#xff0c;廢話不多說&#xff0c;開搞 1、 nacos2.x搭建 1&#xff0c;首先第一步查詢下項目之間的版本對照&#xff0c;不然后期會…

react-native網絡調試工具Reactotron保姆級教程

在React Native開發過程中&#xff0c;調試和性能優化是至關重要的環節。今天&#xff0c;就來給大家分享一個非常強大的工具——Reactotron&#xff0c;它就像是一個貼心的助手&#xff0c;能幫助我們更輕松地追蹤問題、優化性能。下面就是一份保姆級教程哦&#xff01; 一、…

npm啟動前端項目時報錯(vue) error:0308010C:digital envelope routines::unsupported

vue 啟動項目時&#xff0c;npm run serve 報下面的錯&#xff1a; error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at FSReqCallback.readFileAfterClose [as on…

改進候鳥優化算法之三:引入自適應策略的候鳥優化算法(AS-MBO)

引入自適應策略的候鳥優化算法(Migrating Birds Optimization with Adaptive Strategy,簡稱AS-MBO)是對傳統候鳥優化算法(Migrating Birds Optimization,MBO)的一種改進。MBO算法本身是一種基于群體智能的元啟發式優化算法,其靈感來源于候鳥遷徙時的“V”字形飛行隊列,…

02-機器學習-核心概念

以下是機器學習核心概念的詳細梳理。 1. 機器學習三大范式 類型定義典型應用監督學習使用帶標簽的數據訓練模型&#xff0c;預測未知數據的標簽。分類&#xff08;郵件垃圾過濾&#xff09;、回歸&#xff08;房價預測&#xff09;無監督學習從無標簽的數據中發現隱藏模式或結…

Redis實戰(黑馬點評)——關于緩存(緩存更新策略、緩存穿透、緩存雪崩、緩存擊穿、Redis工具)

redis實現查詢緩存的業務邏輯 service層實現 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 現查詢redis內有沒有數據String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的數…

算法-加油站問題

hello 大家好&#xff01;今天開寫一個新章節&#xff0c;每一天一道算法題。讓我們一起來學習算法思維吧&#xff01; function canCompleteCircuit(gas, cost) {// 加油站的總數const n gas.length;// 記錄總剩余油量&#xff0c;若總剩余油量小于 0&#xff0c;說明無法繞環…

訊飛繪鏡(ai生成視頻)技術淺析(二):大模型

1.訊飛星火大模型的基礎架構 2.自然語言處理(NLP)技術的具體實現 3.腳本生成的具體過程與模型公式 4.分鏡生成的具體過程與模型公式 5.視頻生成與編輯的技術細節 6.關鍵技術公式的詳細推導與解釋 一、訊飛星火大模型的基礎架構 訊飛星火大模型是基于Transformer架構的深…

【機器學習】深入探索SVM:支持向量機的原理與應用

目錄 &#x1f354; SVM引入 1.1什么是SVM? 1.2支持向量機分類 1.3 線性可分、線性和非線性的區分 &#x1f354; 小結 學習目標 知道SVM的概念 &#x1f354; SVM引入 1.1什么是SVM? 看一個故事&#xff0c;故事是這樣子的&#xff1a; 在很久以前的情人節&#xf…

pycharm 運行遠程環境問題 Error:Failed to prepare environment.

問題排查 拿到更詳細的報錯信息&#xff1a; Help > Diagnostic Tools > Debug Log Settings section: 添加下面的配置 com.intellij.execution.configurations.GeneralCommandLine 重顯報錯&#xff0c;我這里是再次運行代碼打開 Help | Collect Logs and Diagnosti…