开发教程

C++初级教程 第一章 基础概念

Jesne***Lv.3 中级会员 发表于 2024-6-16 · 最后回复 2024-7-14 IP:辽宁省 2,444 13
本帖最后由 Jesner_Joen 于 2024-7-12 13:20 编辑

啊哈,虽然不知道这种教程在论坛内有没有意义,但是我实在是没事闲的了。所以,我管你们能不能听懂,只要能给我贡献推荐量就行
第一章 基础概念

1.1 声明头文件

先来看个示例:
  1. #include <iostream>
  2. #include <sstream>
  3. #include <stack>
  4. #include <cctype>
  5. #include <cstdlib>

  6. using namespace std;

  7. class Calculator {
  8. private:
  9.     stack<double> nums;
  10.     stack<char> ops;

  11.         int priority(char op) {
  12.         if (op == '+' || op == '-') return 1;
  13.         if (op == '*' || op == '/') return 2;
  14.         return 0;
  15.     }

  16.     void eval() {
  17.         if (nums.size() < 2 || ops.empty()) return;

  18.         double b = nums.top(); nums.pop();
  19.         double a = nums.top(); nums.pop();
  20.         char op = ops.top(); ops.pop();

  21.         double result;
  22.         switch (op) {
  23.             case '+': result = a + b; break;
  24.             case '-': result = a - b; break;
  25.             case '*': result = a * b; break;
  26.             case '/': result = a / b; break;
  27.             default: return;
  28.         }

  29.         nums.push(result);
  30.     }

  31. public:
  32.     double calculate(string expr) {
  33.         stringstream ss(expr);
  34.         char ch;
  35.         double num;

  36.         while (ss >> ch) {
  37.             if (isdigit(ch) || ch == '.') {
  38.                 ss.putback(ch);
  39.                 ss >> num;
  40.                 nums.push(num);
  41.             } else if (ch == '(') {
  42.                 ops.push(ch);
  43.             } else if (ch == ')') {
  44.                 while (!ops.empty() && ops.top() != '(') {
  45.                     eval();
  46.                 }
  47.                 ops.pop();
  48.             } else {
  49.                 while (!ops.empty() && priority(ops.top()) >= priority(ch)) {
  50.                     eval();
  51.                 }
  52.                 ops.push(ch);
  53.             }
  54.         }

  55.         while (!ops.empty()) {
  56.             eval();
  57.         }

  58.         if (!nums.empty()) {
  59.             return nums.top();
  60.         }

  61.         return 0;
  62.     }
  63. };

  64. int main() {
  65.     Calculator calc;
  66.     string expr;
  67.     double last_result = 0.0;
  68.     bool use_last_result = false;

  69.     while (true) {
  70.         if (!use_last_result) {
  71.             cout << "Enter an expression (or 'exit' to quit): ";
  72.             getline(cin, expr);
  73.         } else {
  74.             cout << "Enter an expression (using last result: " << last_result << ") (or 'exit' to quit): ";
  75.             getline(cin, expr);
  76.         }

  77.         if (expr == "exit") {
  78.             break;
  79.         }

  80.         if (expr.empty()) {
  81.             use_last_result = true;
  82.         } else {
  83.             use_last_result = false;
  84.             last_result = calc.calculate(expr);
  85.             cout << "Result: " << last_result << endl;
  86.         }
  87.     }

  88.     cout << "Calculator exited." << endl;

  89.     return 0;
  90. }
复制代码


在本代码中,我体现了C++中几乎所有的基础语法,写了个计算器,语法甚至还稍微超纲了一些。大家现在还不需要懂代码为什么要这样写,只需要先听我了解一下C++中的一些基础概念。在第一节课,我不得不提醒大家:那些你听不懂的词有些来源于自然语言,还有些真的是专业术语。我想跟大家说的是,不要老是死揪那个词不放,也不要因为那个词就放弃了自己的兴趣。随着时间的增长,你会越来越能理解那些自然语言。而又随着知识面的增长,你会对那些专业术语有更进一步的理解。接下来,由我给大家说一下C++中的基础概念。
1)头文件:
开头第一行的
  1. #include <iostream>
复制代码

就是头文件。它声明了我们代码中要用到的库。这个语句在每个程序中都必须要打出,因为在C++中有一个原则:任何东西,都必须先声明,才可运行。如果你的程序的第一句不是以井号(#)开头的头文件,那么你的程序在编译软件里就是一摊空气,相当于什么也没有。这就好比小明去参加考试,但是卷子(好比写代码用的软件)上没有写他自己的名字(好比没写头文件),导致他的分数(好比运行结果)得了零分。
在C++中,我们有很多头文件,但是以后再说。
2)编译:
人类写的C++代码都是不能直接运行的,而是需要其它软件的编译,将人类语言转化成机器语言。代码是给人看的,机器语言是给机器运行的。那直接学机器语言不就行了?还学什么C++!不,你还是太年轻了。
Screenshot_20240616_131140.jpg
3)注释:
注释是C++里面最好理解的一条语法。当字符后出现注释,编译软件会直接跳过它。注释在C++里有两种写法,分别是
  1. switch (op) {
  2.             case '+': result = a + b; break;//声明加法
  3.             case '-': result = a - b; break;//声明减法
  4.             case '*': result = a * b; break;//声明乘法
  5.             case '/': result = a / b; break;//声明除法
  6.             default: return;
  7.         }
复制代码

和
  1. switch (op) {
  2.             case '+': result = a + b; break;
  3.             case '-': result = a - b; break;
  4.             case '*': result = a * b; break;
  5.             case '/': result = a / b; break;
  6.             default: return;
  7.         }
  8. /*本段声明加法,
  9.                   减法,
  10.                   乘法,
  11.                   除法,
  12.        的实现方法.*/
复制代码

其中,双斜杠(//)只能让在其后面的一行字符变成注释,而(/*,*/)组合可以让它们两个之间的字符都变成注释。
4)类
(未编辑完成)
回复 13 最早 最新 只看楼主
常***Lv.2 注册会员
2024-6-16 14:29:02 · 来自手机 IP:陕西省
import tkintker
2# 2024-6-16 14:29:02 收起回复
Занима 2024-8-22 06:55 IP:湖北省
回复 举报
这好像是Python
如果是C++好像创建窗口是
#include <Window.h>不记得Window后面要不要加s
常或青 2024-8-26 09:25 IP:陕西省
回复 举报
这就是蟒蛇
Jesne***楼主Lv.3 中级会员
2024-6-16 17:14:05 · 来自手机 IP:辽宁省
一只晨月鸭 发表于 2024-6-16 16:48
自从开始学汇编到现在,就感觉C++很烂,就怎么说呢,我感觉C++不咋地

但是C++是个以稳为主的语言嘛,不像Java啥的会改语法写法
4# 2024-6-16 17:14:05 回复 收起回复
小***版主
2024-6-16 22:14:19 · 来自手机 IP:河北省
不错的教程,但我认为这个更适合发在编程分享里
6# 2024-6-16 22:14:19 收起回复
Jesner_Joen 2024-6-17 22:24 IP:辽宁省
回复 举报
问一下,申请一次图章是不是只能在一个帖子里生效,不然我这帖得做的猴长
小研Y回复Jesner_Joen 2024-6-18 08:02 IP:河北省
回复 举报
应该是的,你可以看看版规或者咨询一下编程版版主
Jesne***楼主Lv.3 中级会员
2024-6-17 21:53:37 · 来自手机 IP:辽宁省
jxhdamjr 发表于 2024-6-16 21:50
出一期python的好不好

个人感觉Python简单的都不需要单独出教程,哪天C++课堂知识点少的时候就顺便带一下吧。
7# 2024-6-17 21:53:37 回复 收起回复
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则