使用的是VS2017
编译文件,点一下标签栏 CMake(K) -> 全部生成 或者 全部重新生成 。
启动文件,选择后缀 *.exe 启动项来启动程序。
CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。
最外面的CMakeLists.txt文件:
# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置 # 并包含子项目。 # cmake_minimum_required (VERSION 3.8) project ("Test01") # 包含子项目。 add_subdirectory ("Test01")代码解读
cmake文件中#代表的是注释,不用管,用来解释这行命令是用来干嘛的。cmake_minimum_required (VERSION 3.8)申明 cmake 要求的最低版本。project ("Test01")工程名字。add_subdirectory ("Test01")要去调用某个文件夹下的cmake,这样做的好处是,当程序很大的时候,管理起来很方便。文件夹里面的CMakeLists.txt文件:
# CMakeList.txt: Test01 的 CMake 项目,在此处包括源代码并定义 # 项目特定的逻辑。 # cmake_minimum_required (VERSION 3.8) # 将源代码添加到此项目的可执行文件。 add_executable (Test01 "Test01.cpp" "Test01.h") # TODO: 如有需要,请添加测试并安装目标。代码解读
add_executable (Test01 "Test01.cpp" "Test01.h") 把后面两个文件编译成可执行的文件,就是一个编译的过程。也就是要把哪些源文件编译成可执行的文件。Test01.cpp文件:
// Test01.cpp: 定义应用程序的入口点。 // #include "Test01.h" using namespace std; int main() { cout << "Hello World" << endl; return 0; }代码解读
源代码的逻辑都是写到*.cpp文件中去。#include "Test01.h" 引用头文件Test01.h,类似于Python中的import 。using namespace std; 使用命名空间,有点类似于Python中的模块,例如torch模块。Python程序是从上往下执行,但C++不是,C++的程序入口是main()函数,整个工程文件只能有一个main()函数。两个大括号{ }称为程序块(代码块),Python中的程序块采用缩进的方式,C++需要用{ }括起来,{ }配对使用。cout << "Hello World" << endl; 输出 Hello World 。Test01.h文件:
// Test01.h: 标准系统包含文件的包含文件 // 或项目特定的包含文件。 #pragma once #include <iostream> // TODO: 在此处引用程序需要的其他标头。代码解读
*.cpp源码文件(源文件),就是程序逻辑怎么去实现。*.h头文件,用来定义一些东西,比如定义一个类,包含一个库等,基本上就是在头文件去定义。(“定义”,就是告诉你有这个东西,但是不告诉你这个东西是怎么实现的。)*.h文件被称为头文件,头文件通常用于变量,函数,类的定义。经常在*.h头文件定义一些东西,而在*.cpp中去实现这个定义。源文件和源文件之间,通过*.h文件发生关系。一般来说,C++中的代码中,#后面跟着一些东西,是C++的预处理指令。在编译的时候,执行的指令,称为预处理指令。#pragma once 该指令表示,只允许导入一次。#include <iostream> 要导入其他模块,这里模块是IO流。#include 导入文件有两种方式,如果是 < >,表示系统的库,例如 #include <iostream> 。如果自己去定义的,就用 " " 去导入,例如 #include "Test01.h" 。程序运行的时候,把 < > 写成 " " ,程序不会出错,反之一样,但是习惯不好。习惯上按照前述内容的写法来写代码。类型解读
unsigned ** 无符号类型。1个字节占8位,同一个字节,有符号类型(最高位是符号位)表达的范围小于无符号类型。类型没有指明是有符号还是无符号的话,默认是有符号类型。有符号无符号,只针对整型。 // var.h // #pragma once #include<string> #include<iostream> void var_show(); //var.cpp // #include "var.h" using namespace std; void var_show() { int i = 0; cout << i << endl; // endl 可以理解成换行 float j = 2.2; cout << j << endl; // 无符号整型,没有负数。如果让k=-2,输出4294967294,相当于最高位变成了1 // C++是比较危险的语言,如果不注意,编译器不会报错,但结果不对。 unsigned int k = 2; cout << k << endl; char c = 'a', d = 0x35; // 单引号代表一个字符,0x35是一个ASCII码表。这里单引号不能替换成双引号,否则报错。 cout << c << " " << d << endl; // a 5 string str1 = "hello"; // string不是内置类型,使用时先导入#include<string> cout << str1 << endl; // hello char str2[] = "world"; cout << str2 << endl; char str3[] = { 'L', 'i', 'e', 'W', 'e', 'i', '\0' }; // 字符串以 '\0' 结束,代表空字符 cout << str3 << endl; // LieWei }一个数据,一定存在计算机的空间里面,当要读取这个数据的时候,必须有一个指向,去指向这个空间,然后把数据取出来。这个指向,就是指针。
Python 定义变量 a=3 的流程:
#mermaid-svg-nIsDzsY9QJKLZ7VZ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .label text{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .node rect,#mermaid-svg-nIsDzsY9QJKLZ7VZ .node circle,#mermaid-svg-nIsDzsY9QJKLZ7VZ .node ellipse,#mermaid-svg-nIsDzsY9QJKLZ7VZ .node polygon,#mermaid-svg-nIsDzsY9QJKLZ7VZ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .node .label{text-align:center;fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .node.clickable{cursor:pointer}#mermaid-svg-nIsDzsY9QJKLZ7VZ .arrowheadPath{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edgeLabel rect{opacity:0.9}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edgeLabel span{color:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .cluster text{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-nIsDzsY9QJKLZ7VZ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-nIsDzsY9QJKLZ7VZ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-nIsDzsY9QJKLZ7VZ .actor-line{stroke:grey}#mermaid-svg-nIsDzsY9QJKLZ7VZ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .sequenceNumber{fill:#fff}#mermaid-svg-nIsDzsY9QJKLZ7VZ #sequencenumber{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .messageText{fill:#333;stroke:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-nIsDzsY9QJKLZ7VZ .labelText,#mermaid-svg-nIsDzsY9QJKLZ7VZ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-nIsDzsY9QJKLZ7VZ .loopText,#mermaid-svg-nIsDzsY9QJKLZ7VZ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-nIsDzsY9QJKLZ7VZ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-nIsDzsY9QJKLZ7VZ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-nIsDzsY9QJKLZ7VZ .noteText,#mermaid-svg-nIsDzsY9QJKLZ7VZ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-nIsDzsY9QJKLZ7VZ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-nIsDzsY9QJKLZ7VZ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-nIsDzsY9QJKLZ7VZ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-nIsDzsY9QJKLZ7VZ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .section{stroke:none;opacity:0.2}#mermaid-svg-nIsDzsY9QJKLZ7VZ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .section2{fill:#fff400}#mermaid-svg-nIsDzsY9QJKLZ7VZ .section1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .section3{fill:#fff;opacity:0.2}#mermaid-svg-nIsDzsY9QJKLZ7VZ .sectionTitle0{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .sectionTitle1{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .sectionTitle2{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .sectionTitle3{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-nIsDzsY9QJKLZ7VZ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .grid path{stroke-width:0}#mermaid-svg-nIsDzsY9QJKLZ7VZ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .task{stroke-width:2}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskText:not([font-size]){font-size:11px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .task.clickable{cursor:pointer}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskText0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskText1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskText2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskText3{fill:#fff}#mermaid-svg-nIsDzsY9QJKLZ7VZ .task0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .task1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .task2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutside0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutside2{fill:#000}#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutside1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .taskTextOutside3{fill:#000}#mermaid-svg-nIsDzsY9QJKLZ7VZ .active0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .active1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .active2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeText0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeText1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeText2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeText3{fill:#000 !important}#mermaid-svg-nIsDzsY9QJKLZ7VZ .done0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .done1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .done2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneText0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneText1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneText2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneText3{fill:#000 !important}#mermaid-svg-nIsDzsY9QJKLZ7VZ .crit0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .crit1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .crit2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCrit0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCrit1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCrit2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCrit0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCrit1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCrit2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-nIsDzsY9QJKLZ7VZ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .milestoneText{font-style:italic}#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCritText0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCritText1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCritText2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .doneCritText3{fill:#000 !important}#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCritText0,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCritText1,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCritText2,#mermaid-svg-nIsDzsY9QJKLZ7VZ .activeCritText3{fill:#000 !important}#mermaid-svg-nIsDzsY9QJKLZ7VZ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.classGroup text .title{font-weight:bolder}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.clickable{cursor:pointer}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-nIsDzsY9QJKLZ7VZ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-nIsDzsY9QJKLZ7VZ .dashed-line{stroke-dasharray:3}#mermaid-svg-nIsDzsY9QJKLZ7VZ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ .commit-id,#mermaid-svg-nIsDzsY9QJKLZ7VZ .commit-msg,#mermaid-svg-nIsDzsY9QJKLZ7VZ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-nIsDzsY9QJKLZ7VZ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-nIsDzsY9QJKLZ7VZ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-nIsDzsY9QJKLZ7VZ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-nIsDzsY9QJKLZ7VZ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edgeLabel text{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-nIsDzsY9QJKLZ7VZ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-nIsDzsY9QJKLZ7VZ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-nIsDzsY9QJKLZ7VZ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-nIsDzsY9QJKLZ7VZ .note-edge{stroke-dasharray:5}#mermaid-svg-nIsDzsY9QJKLZ7VZ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-nIsDzsY9QJKLZ7VZ .error-icon{fill:#522}#mermaid-svg-nIsDzsY9QJKLZ7VZ .error-text{fill:#522;stroke:#522}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-nIsDzsY9QJKLZ7VZ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-nIsDzsY9QJKLZ7VZ .marker{fill:#333}#mermaid-svg-nIsDzsY9QJKLZ7VZ .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-nIsDzsY9QJKLZ7VZ { color: rgba(0, 0, 0, 0.75); font: ; } 第1步: 开辟一个空间, 把3放进来 第2步: 给这个空间取名字叫aC++ 定义变量 int a=3 的流程:
#mermaid-svg-xmJrqYF96IOxhALI .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-xmJrqYF96IOxhALI .label text{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .node rect,#mermaid-svg-xmJrqYF96IOxhALI .node circle,#mermaid-svg-xmJrqYF96IOxhALI .node ellipse,#mermaid-svg-xmJrqYF96IOxhALI .node polygon,#mermaid-svg-xmJrqYF96IOxhALI .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-xmJrqYF96IOxhALI .node .label{text-align:center;fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .node.clickable{cursor:pointer}#mermaid-svg-xmJrqYF96IOxhALI .arrowheadPath{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-xmJrqYF96IOxhALI .flowchart-link{stroke:#333;fill:none}#mermaid-svg-xmJrqYF96IOxhALI .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-xmJrqYF96IOxhALI .edgeLabel rect{opacity:0.9}#mermaid-svg-xmJrqYF96IOxhALI .edgeLabel span{color:#333}#mermaid-svg-xmJrqYF96IOxhALI .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-xmJrqYF96IOxhALI .cluster text{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-xmJrqYF96IOxhALI .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-xmJrqYF96IOxhALI text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-xmJrqYF96IOxhALI .actor-line{stroke:grey}#mermaid-svg-xmJrqYF96IOxhALI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-xmJrqYF96IOxhALI .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-xmJrqYF96IOxhALI #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-xmJrqYF96IOxhALI .sequenceNumber{fill:#fff}#mermaid-svg-xmJrqYF96IOxhALI #sequencenumber{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI #crosshead path{fill:#333;stroke:#333}#mermaid-svg-xmJrqYF96IOxhALI .messageText{fill:#333;stroke:#333}#mermaid-svg-xmJrqYF96IOxhALI .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-xmJrqYF96IOxhALI .labelText,#mermaid-svg-xmJrqYF96IOxhALI .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-xmJrqYF96IOxhALI .loopText,#mermaid-svg-xmJrqYF96IOxhALI .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-xmJrqYF96IOxhALI .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-xmJrqYF96IOxhALI .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-xmJrqYF96IOxhALI .noteText,#mermaid-svg-xmJrqYF96IOxhALI .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-xmJrqYF96IOxhALI .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-xmJrqYF96IOxhALI .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-xmJrqYF96IOxhALI .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-xmJrqYF96IOxhALI .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .section{stroke:none;opacity:0.2}#mermaid-svg-xmJrqYF96IOxhALI .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-xmJrqYF96IOxhALI .section2{fill:#fff400}#mermaid-svg-xmJrqYF96IOxhALI .section1,#mermaid-svg-xmJrqYF96IOxhALI .section3{fill:#fff;opacity:0.2}#mermaid-svg-xmJrqYF96IOxhALI .sectionTitle0{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .sectionTitle1{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .sectionTitle2{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .sectionTitle3{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-xmJrqYF96IOxhALI .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .grid path{stroke-width:0}#mermaid-svg-xmJrqYF96IOxhALI .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-xmJrqYF96IOxhALI .task{stroke-width:2}#mermaid-svg-xmJrqYF96IOxhALI .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .taskText:not([font-size]){font-size:11px}#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-xmJrqYF96IOxhALI .task.clickable{cursor:pointer}#mermaid-svg-xmJrqYF96IOxhALI .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xmJrqYF96IOxhALI .taskText0,#mermaid-svg-xmJrqYF96IOxhALI .taskText1,#mermaid-svg-xmJrqYF96IOxhALI .taskText2,#mermaid-svg-xmJrqYF96IOxhALI .taskText3{fill:#fff}#mermaid-svg-xmJrqYF96IOxhALI .task0,#mermaid-svg-xmJrqYF96IOxhALI .task1,#mermaid-svg-xmJrqYF96IOxhALI .task2,#mermaid-svg-xmJrqYF96IOxhALI .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutside0,#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutside2{fill:#000}#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutside1,#mermaid-svg-xmJrqYF96IOxhALI .taskTextOutside3{fill:#000}#mermaid-svg-xmJrqYF96IOxhALI .active0,#mermaid-svg-xmJrqYF96IOxhALI .active1,#mermaid-svg-xmJrqYF96IOxhALI .active2,#mermaid-svg-xmJrqYF96IOxhALI .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-xmJrqYF96IOxhALI .activeText0,#mermaid-svg-xmJrqYF96IOxhALI .activeText1,#mermaid-svg-xmJrqYF96IOxhALI .activeText2,#mermaid-svg-xmJrqYF96IOxhALI .activeText3{fill:#000 !important}#mermaid-svg-xmJrqYF96IOxhALI .done0,#mermaid-svg-xmJrqYF96IOxhALI .done1,#mermaid-svg-xmJrqYF96IOxhALI .done2,#mermaid-svg-xmJrqYF96IOxhALI .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-xmJrqYF96IOxhALI .doneText0,#mermaid-svg-xmJrqYF96IOxhALI .doneText1,#mermaid-svg-xmJrqYF96IOxhALI .doneText2,#mermaid-svg-xmJrqYF96IOxhALI .doneText3{fill:#000 !important}#mermaid-svg-xmJrqYF96IOxhALI .crit0,#mermaid-svg-xmJrqYF96IOxhALI .crit1,#mermaid-svg-xmJrqYF96IOxhALI .crit2,#mermaid-svg-xmJrqYF96IOxhALI .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-xmJrqYF96IOxhALI .activeCrit0,#mermaid-svg-xmJrqYF96IOxhALI .activeCrit1,#mermaid-svg-xmJrqYF96IOxhALI .activeCrit2,#mermaid-svg-xmJrqYF96IOxhALI .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-xmJrqYF96IOxhALI .doneCrit0,#mermaid-svg-xmJrqYF96IOxhALI .doneCrit1,#mermaid-svg-xmJrqYF96IOxhALI .doneCrit2,#mermaid-svg-xmJrqYF96IOxhALI .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-xmJrqYF96IOxhALI .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-xmJrqYF96IOxhALI .milestoneText{font-style:italic}#mermaid-svg-xmJrqYF96IOxhALI .doneCritText0,#mermaid-svg-xmJrqYF96IOxhALI .doneCritText1,#mermaid-svg-xmJrqYF96IOxhALI .doneCritText2,#mermaid-svg-xmJrqYF96IOxhALI .doneCritText3{fill:#000 !important}#mermaid-svg-xmJrqYF96IOxhALI .activeCritText0,#mermaid-svg-xmJrqYF96IOxhALI .activeCritText1,#mermaid-svg-xmJrqYF96IOxhALI .activeCritText2,#mermaid-svg-xmJrqYF96IOxhALI .activeCritText3{fill:#000 !important}#mermaid-svg-xmJrqYF96IOxhALI .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-xmJrqYF96IOxhALI g.classGroup text .title{font-weight:bolder}#mermaid-svg-xmJrqYF96IOxhALI g.clickable{cursor:pointer}#mermaid-svg-xmJrqYF96IOxhALI g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-xmJrqYF96IOxhALI g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-xmJrqYF96IOxhALI .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-xmJrqYF96IOxhALI .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-xmJrqYF96IOxhALI .dashed-line{stroke-dasharray:3}#mermaid-svg-xmJrqYF96IOxhALI #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI .commit-id,#mermaid-svg-xmJrqYF96IOxhALI .commit-msg,#mermaid-svg-xmJrqYF96IOxhALI .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-xmJrqYF96IOxhALI g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-xmJrqYF96IOxhALI g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-xmJrqYF96IOxhALI g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-xmJrqYF96IOxhALI .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-xmJrqYF96IOxhALI .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-xmJrqYF96IOxhALI .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-xmJrqYF96IOxhALI .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-xmJrqYF96IOxhALI .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-xmJrqYF96IOxhALI .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-xmJrqYF96IOxhALI .edgeLabel text{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xmJrqYF96IOxhALI .node circle.state-start{fill:black;stroke:black}#mermaid-svg-xmJrqYF96IOxhALI .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-xmJrqYF96IOxhALI #statediagram-barbEnd{fill:#9370db}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-state .divider{stroke:#9370db}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-xmJrqYF96IOxhALI .note-edge{stroke-dasharray:5}#mermaid-svg-xmJrqYF96IOxhALI .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-xmJrqYF96IOxhALI .error-icon{fill:#522}#mermaid-svg-xmJrqYF96IOxhALI .error-text{fill:#522;stroke:#522}#mermaid-svg-xmJrqYF96IOxhALI .edge-thickness-normal{stroke-width:2px}#mermaid-svg-xmJrqYF96IOxhALI .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-xmJrqYF96IOxhALI .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-xmJrqYF96IOxhALI .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-xmJrqYF96IOxhALI .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-xmJrqYF96IOxhALI .marker{fill:#333}#mermaid-svg-xmJrqYF96IOxhALI .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-xmJrqYF96IOxhALI { color: rgba(0, 0, 0, 0.75); font: ; } 第1步: 开辟一个空间, 然后用一个指针指向这个空间, 指针名字叫a 第2步: 把3放入该空间注意C++和Python创建变量的区别。很多语言,用Python这种创建变量的方式比较多。
// 表示有一个整型空间,该空间名字叫a int a // 表示有一个指针,这个指针指向了某个整型空间,该指针的名字叫a。 // 这个指针没有初始化,所以不知道指向了哪个内存空间。这个时候的指针,称为野指针。 int *a // point.h // #pragma once #include<iostream> void point_show(); //point.cpp // #include "point.h" using namespace std; void point_show() { int var = 20; // 实际变量的声明 int* ip; // 指针变量的声明,*是指针运算符。 ip = &var; // 在指针变量中存储 var 的地址。ip 这个指针指向了 var 这个变量。 cout << "Value of var variable: "; cout << var << endl; // Value of var variable: 20 // 输出在指针变量中存储的地址 cout << "Address stored in ip variable: "; cout << ip << endl; // Address stored in ip variable: 000000F2F1DFFCA4 // 访问指针中地址的值 cout << "Value of *ip variable: "; cout << *ip << endl; // Value of *ip variable: 20 使用时的*,表示把指向的内容取出来。 }代码解读
sizeof() 是一个内置函数,计算变量所占的空间。使用 { }初始化数组。b[5] 中的 b ,是一个指针,指向第一个元素的地址, *b 可以取出第一个元素。C++没有越界检查,可以越界取值,访问其他内存空间,非常危险,容易被黑客利用。C++能够越界取值,是因为整个数组操作的原理,是指针操作,指针操作没有任何限制。C++稍不留神就越界了,必须非常注意!引用,就是取别名,或者取外号。
// ref.h // #pragma once #include<string> #include<iostream> void ref_show(); //ref.cpp // #include "ref.h" using namespace std; void ref_show() { // 声明简单的变量 int i=3; double d=4; // 声明引用变量 int& r = i; // 在int后加&,就是取别名,将i和r关联起来。 double& s = d; i = 5; cout << "Value of i : " << i << endl; // Value of i : 5 cout << "Value of i reference : " << r << endl; // Value of i reference : 5 d = 11.7; cout << "Value of d : " << d << endl; // Value of d : 11.7 cout << "Value of d reference : " << s << endl; // Value of d reference : 11.7 }代码解读
引用(取别名),就是在类型后面加 & ,别名必须和真实的名字关联起来,否则没有意义。别名,指的是同一个内存空间,值不变。引用 vs 指针
引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。 void ref_show() { int var = 20; int* ip; // 类型后面跟*,创建指针 int& r = var; // 取别名 ip = &var; // var变量的指针ip *ip; // 取指针指向内存空间的内容 cout << var << endl; cout << r << endl; cout << ip << endl; // 输出指针指向的地址 cout << *ip << endl; }代码解读
注意不同位置的 * & 所表示的不同含义。函数定义方法
函数都应该有一个返回值,Python中用关键字 def 定义的。
C++不用关键字定义,按照一定格式定义就行。如果没有返回值,定义成 void 类型;有返回值,返回值必须有个类型,比如 int
// 没有返回值 void fn(){ 函数体; } // 有返回值 int func(inta, intb){ 函数体; return **; } // param.h // #pragma once #include<iostream> void param_show(); //param.cpp // #include "param.h" using namespace std; //值传递 void swap_value(int x,int y) { int z = x; x = y; y = z; } //指针传递 void swap_point(int* x, int* y) { int z = *x; // 把x的指向空间的值取出来给到z *x = *y; *y = z; } //引用传递 void swap_ref(int& x, int& y) { int z = x; x = y; y = z; } void param_show() { int a = 3, b = 4; swap_value(a, b); // 因为是拷贝一份,所以 x, y中做任何操作,不会影响到 a, b cout << a << " " << b << endl; // 3 4 int c = 3, d = 4; swap_point(&c, &d); // 把 c, d 的指针取出来传进去 cout << c << " " << d << endl; // 4 3 int e = 3, f = 4; swap_ref(e, f); cout << e << " " << f << endl; // 4 3 }代码解读
函数有三种传参方式:值传递,指针传递,引用传递。值传递,是把 a b 分别复制一份给 x y , x y 做任何操作,不会影响到 a b 。引用传递比较安全,调用方式和值传递差不多。像Python内部都是引用机制。堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。
如果是在程序块中定义了一个变量,会申请一个内存空间,当程序块执行完之后,就会把这个空间释放掉。这种空间就称为栈空间。
// memory.h // #pragma once #include<iostream> void memory_show(); //memory.cpp // #include "memory.h" #include <Windows.h> using namespace std; //栈中变量的错误使用演示 void stack() { int* ptr_a = NULL; // 指到空这个位置,也就是0的位置 { int a = 3;//栈中声明一个变量a,当执行出作用域后,变量会被自动清理 ptr_a = &a; cout << *ptr_a << endl; // 3 } cout << *ptr_a << endl; // 3 虽然能得到结果,但是这操作是错误的,因为这时候a已经被释放,或者马上要被释放掉,不再安全。 } //堆 void heap() { int* ptr_a = NULL; { //在堆中声明一个变量,初始化值为3,并把该变量的指针传递给ptr_a指针变量 ptr_a = new int(4); // 新建一个整型空间,里面填一个值4 } cout << *ptr_a << endl; // 4 这不会有任何问题,栈上这么操作不对,有隐患。 delete ptr_a; // 如果不执行这句,内存会泄露 } //泄露 void leak() { for (int i = 1; i < 1000000; i++) { int* a = new int[100000]; // 指向一个指针 //int a[100000]; // 栈空间不用 delete,内存也不增大,会自动释放内存 delete[] a; // 堆空间如果内存不释放,会导致内存越来越大 Sleep(1); } } void memory_show() { //stack(); heap(); //leak(); }代码解读
局部变量都是在栈上申请的,栈一旦超出定义域(作用域),栈里面的内容就有可能被回收掉,这时候栈里面的内容不再安全了。栈的内存空间是自动回收和释放的。堆,是全局的,在任何地方申请的堆空间,都是在同一个地方去申请。如果不用这块空间,需要手动释放掉。堆空间手动释放,栈空间自动释放。new 关键字是在堆上,申请(新建)一个空间。 delete ptr_a; 使用堆空间,一定要用这行代码手动释放,否则一直占用内存空间,容易导致内存泄漏(内存占用越来越多,最后爆掉)。new int[] 和 delete[] , 如果申请内存空间是带了 [] ,是数组,删除时也必须带,配对使用的。不是数组,就不用带 [] 。对内存管理,是C++的一个难点代码解读
C++中没有真正的布尔值,但可以去申请 a=True , 打印出来也会发现 a=1,False 打印出来就是 0 。构造函数与析构函数
构造函数是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。析构函数是一种特殊的成员函数,它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。构造函数和析构函数在任何面向对象编程的语言里都有。 //clazz.h // #pragma once #include<iostream> void clazz_show(); //clazz.cpp #include "clazz.h" #include <string> using namespace std; struct Person { //属性 string name; int age; //默认构造函数 Person() { this->name = "liewei"; this->age = 32; } //自定义构造函数 Person(string name, int age) { this->name = name; this->age = age; } //方法 void say() { cout << "my name is " << this->name << ", I am " << this->age << " year old." << endl; } //析构函数 ~Person() { cout << "person 已经被释放" << endl; } }; void clazz_show() { { Person liewei; // 创建实例 liewei.age = 34; liewei.say(); } cout << "----------------------" << endl; { Person* zhang = new Person("zhang3", 25); zhang->say(); (*zhang).say(); } cout << "**********************" << endl; }代码解读
Python中使用 self 就可以定义属性,但C++中属性必须明确定义出来,而且放在方法的外面的。C++中构造函数是没有返回值的,而且名字和类名必须一摸一样。同一个作用域下,两个函数的函数名 Person() 相同,参数名不同,叫做函数重载。如果两个函数的函数名和参数名都相同,就不叫函数重载,会报错。Python不支持函数重载的。析构函数的定义,是在函数名前加一个 ~ 号,函数名必须和类名一样。析构函数是没有参数的。this 类似于 self ,但在C++中是一个指针。如果是一个对象,用 . 去操作;如果是一个属性或者方法,用 -> 操作。私有成员(private):外面不能操作
保护成员(protected):只有继承的才能操作
公有成员(public):都能操作
代码解读
除了构造函数之外,其他的函数,如果要用来继承,都应该是虚函数。如果不同的类之间有共同的属性,希望只定义一个函数就可以搞定,所以需要用到函数模板。
Python是弱类型语言,所以不用担心这个。C++是强类型语言,这个问题就不简单了。
//fun_temp.h // #pragma once #include<iostream> void fun_temp_show(); //fun_temp.cpp #include <iostream> using namespace std; template <typename T> // 声明一个模板叫T T add(T& a, T& b) { // & 是引用 return a + b; // 返回值不要传局部变量的指针和引用,否则会遇到大麻烦,说不定哪天程序就崩溃了。可以通过值返回,或传堆回去 } void fun_temp_show() { float x = 3.1f, y = 4.33f; cout << add(x, y) << endl; }模板,就是在强类型语言中,让写的代码更加精简。
//clazz_temp.h // #pragma once #include<iostream> void clazz_temp_show(); //clazz_temp.cpp #include <iostream> using namespace std; template <class T> struct Pair { T m_first;// 不知道类型,用一个泛性模板代替 T m_second; Pair(T first,T second):m_first(first),m_second(second){} T sum() { return m_first + m_second; } }; void clazz_temp_show() { double x = 3.1, y = 4.2; Pair<double> p(x, y); cout << p.sum() << endl; }输出结果
vector size = 0 extended vector size = 5 value of vec [0] = 0 value of vec [1] = 1 value of vec [2] = 2 value of vec [3] = 3 value of vec [4] = 4 value of v = 0 value of v = 1 value of v = 2 value of v = 3 value of v = 4备注:部分内容摘录自其它网站,若有侵权,请联系作者删除!

