文章目录

  • 第 1 节:项目需求
  • 第 2 节:项目实现
  • 第 3 节:项目剖析
    • 3.1编程的本质
    • 3.2 极简的 C/C++ 语言语法规则
    • 3.3 头文件的使用
    • 3.4 程序从哪里开始执行-main 函数
    • 3.5 使用其他函数
    • 3.6 不变的誓言-“字符串常量”
    • 3.7 让计算机说话:cout 和 printf 的使用
    • 3.8命名空间的使用
    • 3.9 软件是怎样炼成的: C++程序的编译过程
    • 3.10 程序的注释

第 1 节:项目需求

  本次通过模拟黑客攻击系统的界面来学习C++的一些入门知识。初学者打开这个攻击系统后,首先看到的就是一个“功能菜单”。 以便让黑客选择所需要的功能。 假设需求如下:
1. 网站 404 攻击
2. 网站篡改攻击
3. 网站攻击记录
4. DNS 攻击
5. 服务器重启攻击

第 2 节:项目实现

在vs2022中创建一个空项目 , 添加源文件 main.c

#include <iostream>
#include <Windows.h>
/*1.网站 404 攻击
2.网站篡改攻击
3.网站攻击记录
4.DNS 攻击
5.服务器重启攻击 */
int main(void){ std::cout << "1.网站 404 攻击" << std::endl; std::cout << "2.网站篡改攻击" << std::endl; std::cout << "3.网站攻击记录" << std::endl; std::cout << "4.DNS 攻击" << std::endl; std::cout << "5.服务器重启攻击" << std::endl;system("pause");  return 0; }

编译结果如下:

第 3 节:项目剖析

3.1编程的本质

本质就是:“程序员”预先编写一系列命令,控制程序执行特定的任务。 “程序员”就是“上帝”。
  失去控制?除非程序有 Bug… 说到BUG,有一个大事件是计算机时钟 BUG 导致美军海湾战争中,唯一过百的伤亡(死 28 人,伤 100 余人) 。
  BUG 事件:1991 年 2 月,美军的爱国者反导弹系统失效,未能拦截伊拉克的飞毛腿导弹,宰 赫兰基地被炸毁,场炸死 28 个美国士兵,炸伤 100 多人,造成美军海湾战争中唯一一次伤 亡超过百人的重大损失。 BUG 分析:爱国者反导弹系统,每工作 1 小时,系统时钟延时 3ms 左右,当时已经连续工作 了 100 小时,延时达到三分之一秒!飞毛腿导弹足以击中目标了! 需要关机重启,战事太急,没时间关机 。
  重要的事情再说一遍: 编程,就是使用程序员的思维,来控制计算机做事情。

3.2 极简的 C/C++ 语言语法规则

原始的规则:

  1. 各“语法单位”(组成部分)使用任意个(至少 1 个)分隔符隔开。 分隔符有:空格,或 tab 键,或换行符。
int main(void) int
main(void)

都是合法的。
而 intmain(void) 是非法的。
2. 必须使用英文输入法输入(仅双引号括起来的“字符串”中可使用中文)
3. 每条代码的后面使用 ;表示这个指令代码结束。
4. #include 等预处理指令,必须一条指令占一行 其他规则不需记忆,在后面的项目实践中掌握。

以下代码也能编译运行,但给人的美观度非常差。 高逼格的代码: (推荐),看上去结构清晰,很快清楚代码所表达的内容。无论如何,只要遵循最基本的原则, 代码就是合法的, 就能编译执行. 懂得最基本的规则之后, 再追求优雅风格的代码(高逼格风格)。

3.3 头文件的使用

3.3.1为什么要使用头文件
  程序如戏 程序中有很多元素(std::cout, system), 都是一个个演员 但是他们之间都互不认识, 但是却要一起合作,强行编译, 就会导致错误! 得预先介绍他们, 知道他们各自的名号和用法。
  解决方案: 包含相应的头文件! (头文件中, 含有相关元素的介绍说明)
std::cout  需要包含头文件: iostream
system   需要包含头文件: Windows.h
#include <Windows.h>   表示把文件 Windows.h 中的所有内容拷贝(复制)到“这里”。
3.3.2头文件的查找路径

#include <Windows.h>

<>表示,从编译器默认的路径中去找文件 stdio.h 这个默认路径,取决于编译器。不同平台下不同编译器的路径都不相同。 这个默认路径下,已经包含了 c 标准库所需要的所有头文件。 使用 C++标准库的头文件使用该方式。 #include “mytest.h”
“” 表示从当前目录下寻找文件 mytest.h 如果在当前目录下找不到,再从编译器默认的路径中查找。 使用用户自定义的头文件使用该方式。
3.3.3头文件的位置
要求放在文件的最前面。 #include 的作用是,把相关的声明拷贝到这个文件内, 所以都习惯把#include 放到文件的最前面。 如果放到后面,当 include 之前出现了相关的函数,就会有问题,例如下面这个程序:

3.4 程序从哪里开始执行-main 函数

  人生,就是一个程序。在不同的阶段,做不同的事。每件事,就是一个函数。 每个人的人生都不相同,以不同的顺序,做不同的事(相当于调用不同的“函数”),但是都是从“出生”开始。
  每个软件也各不相同,包含不同的函数,但是都是从 main 函数开始:
3.4.1main 函数的要求

  1. 返回类型
  2. 参数
  3. 返回值

3.4.2 main 函数的作用:
  main 函数是程序的唯一入口。也就是说,程序运行时,首先从 main 函数开始执行。 一个程序,必须要有一个 main 函数,而且也只能有一个 main 函数。
main 函数的格式:
格式 1: int main(void) { }
格式 2: 具体用法在后面的函数部分,再详细讲解

int main(int argc , char* argv)
{
//函数体
}

3.4.3 main 函数的返回值
  main 函数应该用 return 返回一个 int 类型数据,也就是说,必须返回一个整数。
一般用法:
程序成功结束,则 main 函数返回 0 程序有异常,则返回一个大于 0 的整数。

3.5 使用其他函数

  真正强大的人,总是善于使用各种资源。 使用已有的函数,来完成自己的工作,而不是一切都由自己来实现。有一句IT 格言:不要重复制造轮子 —《人月神话》,就是说要尽可能使用已经开发好的函数。
那么有哪些“其它函数”呢?
1.C 标准库
2.C++标准库
3.第三方开源框架
4.公司内已经开发好的函数
5.程序员自己定义的函数

3.6 不变的誓言-“字符串常量”

  字符常量是由一对单撇号括起来的单个字符,如 ‘a’、‘D’、‘?’、‘$’。在 C/C++ 语言中,除了字符常量外还有字符串常量,顾名思义就是多个“字符”串在一起。与字符常量有所不同,字符串常量是用“双撇号”括起来的多个字符的序列,如"How are you"、“I love you”、“你好”。当然,只要是“双撇号”括起来的,就算只有一个字符也叫字符串,如"a"。字符常量 ‘a’与字符串常量"a"是不同的。
  一个字符在内存中只占一字节,而字符串本质上是多个字符组成的字符数组,C/C++语言规定,在每一个字符串常量的结尾,系统都会自动加一个字符’\0’作为该字符串的“结束标志符”,系统据此判断字符串是否结束。这里要特别强调一点:‘\0’是系统自动加上的,不是人为添加的。
  ‘\0’ 是 ASCII 码为 0 的字符,它不会引起任何控制动作,也不是一个可以显示的字符。比如字符串常量"CHINA",表面上看它只有 5 个字符,但实际上它在内存中占 6 字节,‘C’、‘H’、‘I’、‘N’、‘A’、’\0’ 各占一字节。如果要输出该字符串,‘\0’ 不会输出。也就是说,虽然实际上总共有 6 个字符,‘\0’ 也包括在其中,但输出时 ‘\0’ 不会输出。系统从第一个字符 ‘C’ 开始逐个输出字符,直到遇到 ‘\0’,则表示该字符串结束,停止输出。
  也就是说,在字符串常量中,如果“双撇号”中能看见的字符有 n 个,那么该字符串在内存中所占的内存空间为 n+1 字节。
“你爱我吗”
“I love you.”

std::cout << “我的战斗力是” << 10000;

“我的战斗力是”是字符串常量 ,10000 是整数常量。

`std::cout << “9527”<<“的年龄是” << 38;`

“9527”是字符串常量 ,38 是整数常量
  常量和变量的区别?
常量:在程序整个运行期间,值不会发生任何变化。 变量:在程序整个运行期间,值随时可以发生变化。

3.7 让计算机说话:cout 和 printf 的使用

3.7.1C++风格的打印:
实例:

std::cout << “你好! Rock.” ;
std::cout << “你好! Rock.” << std::endl;
std::cout << std::endl;
std::cout <<”工资: “ << 30000;
std::cout <<”工资: 30000“;
std::cout << 3.1415;

使用要求: 需要包含头文件 #include 注意不是#include <iostream.h>
std 是一个命名空间(下一节详细讲解), cout 是 std 命名空间内的一个“对象”。 endl 也是 std 命名空间内的一个对象,用来表示“回车符”(换到下一行的最前面)。
对象:先简单的理解为一个具体的实体。(在后续视频中,会详细介绍 C++面向对象的概念)
std::cout << 相当于调用了一个特殊的函数(但不是函数),用来打印数据。
std::cout << “你好!” << “Rock!”;
等效于:
std::cout << “你好!”; std::cout << “Rock!”; std::cout, 可以连续输出任意多个数据,中间用 << 隔开。

3.7.2 C 风格的打印:
实例:

printf(“你好!Rock”);
printf(“你好!Rock\n”);
printf(“\n”); printf(“工资:30000”);
printf(“工资:%d”, 30000);
printf(“工资:%d 年假:%d”, 30000, 12);
printf(“%f”, 3.1415);
printf(“圆周率:%f”, 3.1415);

说明:

  1. 占位符的使用
  2. %d 整数 %f 浮点数(带小数部分的数据)
  3. 使用要求: 需要包含头文件 #include <stdio.h>
    特别注意:
      std::cout 和 printf 还有很多用法,现在只需要掌握以上最常用的用法,其他的用法现在不需要关注。其他用法在后续课程中,需要时再讲解。
    打印语句的使用场合:
       ‘打印’常常指:把信息输出到“标准输出设备”(标准输出设备,就是显示器中的“终端”)。
  4. 控制台应用程序的输出
  5. 程序调试 Bug 的重要手段

3.8命名空间的使用

3.8.1使用命名空间。
用法 1:

#include <iostream>
#include <string>
namespace China { float population = 14.1; //单位: 亿 std::string capital = "北京"; }
namespace Japan { float population = 1.27; //单位: 亿 std::string capital = "东京"; }
using namespace Japan;
int main(void)
{ std::cout << "首都:" << capital << std::endl; std::cout << "人口:" << population << std::endl;        std::cout << "首都:" << China::capital << std::endl; std::cout << "人口:" <<China::population << std::endl; system("pause"); return 0;
}

用法 2:

#include <iostream>
#include <string>
namespace China
{ float population = 14.1; //单位: 亿 std::string capital = "北京";
}
namespace Japan
{ float population = 1.27; //单位: 亿 std::string capital = "东京";
}//注意:没有 namespace //直接指定命名空间中的标识符,而不是整个域名
using China::capital;
using Japan::population;
int main(void)
{std::cout << "首都:" << capital << std::endl; std::cout << "人口:" << population <<    std::endl; system("pause"); return 0;
}

用法 3:

#include <iostream>
#include <string>
namespace China
{ float population = 14.1; //单位: 亿 std::string capital = "北京";
}
namespace Japan
{ float population = 1.27; //单位: 亿 std::string capital = "东京";
}
using namespace China;
using Japan::population;
int main(void)
{ std::cout << "首都:" << capital << std::endl; std::cout << "人口:" << population << std::endl; //出错! system("pause"); return 0;
}

错误提示: population”: 不明确的符号。
错误原因:

解决方案: 指定完整的域名(Japan::population )来表示。

......
int main(void)
{ std::cout << "首都:" << capital << std::endl;std::cout << "人口:" << Japan::population << std::endl; //出错! system("pause"); return 0;
}

说明: 这个程序中的 string 是 c++的字符串类型,先简单了解即可,以后会详细学习到。

3.9 软件是怎样炼成的: C++程序的编译过程

使用 vs, 只需单击一下,就把源代码转换成“软件”。

背后实际经历了一下 4 个处理阶段:

3.10 程序的注释

3.10.1注释的目的:
为了让程序更方便阅读(“可读”),以便于维护。
3.10.2需要注释的内容:

  1. 重要变量名的作用(用来表示什么)
  2. 比较复杂的算法思想
  3. 程序中的关键步骤
    3.10.3注释的方式
    有两种注释方式

1 单行注释 // 在行尾,或代码的上一行 在代码的下一行也可以,但很少有人这么做。
. 多行注释 /* */ 不支持嵌套。
2 不要为了注释而注释! 过多的注释,反而有害!会把真正需要注意的东西淹没。
3.10.4注释的风格
函数的注释,有特别的“姿势”,可以让代码显得更规范。

  1. 在行尾注释 使用//注释
  2. 在代码的上一行使用//注释
  3. 多方内容的注释,使用 /* */
  4. 函数的注释 具体方法,在函数部分再详细学习。

c++学习笔记:黑客攻击系统-功能菜单相关推荐

  1. C++黑客攻击系统-功能菜单

    项目需求 给黑客攻击系统 打印功能菜单 小说式项目分析 " 想必有疑惑的声音:"我自己都不会?"三年前小森 怎么打印? 难道用打印机 ? "不可能,绝对不可能, ...

  2. 【C++学习之路】第二章——C++基础语法学习(1)之黑客攻击系统

    2 C++基础语法学习(1)之黑客攻击系统 遵循原则:从实战中学习知识 法律声明:本系统仅能攻击自己搭建的网站,作为学习使用,不会触犯法律 time:2020.01.20 author:姜海天 IDE ...

  3. C++入门实现黑客攻击系统(准备工作)

    分析项目需求 黑客打开这个攻击系统后,首先看到的就是一个"功能菜单". 以便让黑客选择所需要的功能. 假设需求如下: 1.网站404攻击 2.网站篡改攻击 3.网站攻击记录 4.D ...

  4. C++黑客攻击系统-重复验证

    "重复验证?为啥要重复验证呀"小森 "如果不重复验证,那么输入错误了,提示输入账号和密码,就结束了,不应该是重复验证吗"小程 "emmmm-好像也对& ...

  5. Linux学习笔记之——Linux系统内部相关介绍

    Linux学习笔记之--Linux系统内部相关介绍 摘要:主要记录一些比较有用的能够帮助理解和使用Linux的知识.比如一些相关概念.没兴趣的看看就好.知道有这么个东西.注意事项.和一些常用目录的作用 ...

  6. STM32F103学习笔记四 时钟系统

    STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...

  7. oracle如何往dg加盘_学习笔记:Oracle DG系统 主备库中表空间和数据文件增加删除等管...

    天萃荷净 Oracle Data Guard表空间和数据文件管理汇总 汇总日常工作中操作,在Oracle DG结构系统中,如何删除备库表空间和数据文件,如何管理主库与备库之间的文件系统,详见文章内容. ...

  8. PhysX学习笔记2 -cloth系统3d模型的导入

    PhysX学习笔记2 -cloth系统3d模型的导入 PhysX的cloth的demo中,3d模型是用.obj格式. 环境:win2000, PhysX安装包: PhysX_6.11.01_Syste ...

  9. 太任性!00 后少年买不到回国机票,因“泄愤”找黑客攻击系统,被判刑 4 年

    整理 | 王晓曼 出品 | 程序人生(ID:coder _life) 因买不到回国机票,一气之下,身处境外的17岁少年陈某竟多次.持续攻击某航空公司计算机系统,致使该航空公司对外服务网络全面瘫痪近四小 ...

  10. 操作系统学习笔记-04-操作系统的运行机制和体系结构

    操作系统学习笔记-2019 王道考研 操作系统-04-操作系统的运行机制和体系结构 文章目录 4-操作系统的运行机制和体系结构 4.1知识总览 4.2运行机制 4.2.1预备知识:什么是指令? 4.2 ...

最新文章

  1. OAuth 2.0系列教程(十) 资源拥有者密钥证书授权请求和响应
  2. 关于vc6 在mfc ClassWizard中无法添加成员变量
  3. 老生常谈之CSS的垂直居中
  4. tomcat设置JSessionID长度问题
  5. 喜大普奔:史上最全的报表模板库免费用!
  6. php easyui filebox,EasyUI1.4 新控件TextBox,FileBox
  7. 腾讯视频下载的qlv格式知否怎么转换成MP4
  8. 洛谷 P5322 [BJOI2019]排兵布阵
  9. 加入AI考拉大家庭,是一种怎样的体验?--来自考拉码农的心声
  10. vrf路由泄露原理和简单示例
  11. python下载哪一个安装包_python中正确安装对应版本的包
  12. 搞不定视频会议?来InfoComm China 2021涨姿势吧
  13. 怎样用C/C++开发图形界面(GUI)程序——点名器示例
  14. Nordic nRF5 SDK 学习笔记之七, 功耗评估及电源优化
  15. SubText 学习笔记(一)
  16. 银联支付 - 手机控件支付和WAP网页支付
  17. 表索引的定义、创建和使用
  18. 车牌识别系统不能连接服务器,车牌识别系统常见问题及其解决方法
  19. 苹果知名开发者怒“怼”:GitHub 不可信,俄罗斯开发者贡献的项目遭毁灭性打击!...
  20. cron 表达式 1小时30分钟,100分钟执行一次

热门文章

  1. Fastadmin读取数据库配置
  2. QQ揭秘:如何实现托盘闪动消息提醒?【低调赠送:QQ高仿版GG 4.1 最新源码】...
  3. 谷歌google安装vue插件,(npm安装)避坑指南
  4. 论文笔记:A novel DRM scheme for accommodating expectations of personal use
  5. 【完结!】数据挖掘从入门到放弃(五)seaborn 的数据可视化
  6. 内网通过代理服务器访问高德地图服务的方法
  7. Ubuntu20.04 linux Erlang编程----毕达哥拉斯定理
  8. Microservice Patterns 下载
  9. 【洞见研报】网络游戏薪酬报告(薪酬报告,网络游戏,游戏公司岗位)
  10. android usb 键盘,android4.4 修改USB外接法语键盘