Skip to content

Commit ebbda11

Browse files
committed
Started Chapter 6
1 parent bb855a6 commit ebbda11

17 files changed

+331
-47
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
55
### 此项目已经开始!
66

7-
当前进度:泛讲篇第四章完成。参见[Preview](https://github.com/cppHusky/cppHusky-cpp-Tutorial/releases/tag/preview)
7+
当前进度:泛讲篇第五章完成。参见[Preview](https://github.com/cppHusky/cppHusky-cpp-Tutorial/releases/tag/preview)
88

99
我为此规划了一个大致的编章结构,参见[Structure.md](https://github.com/cppHusky/cppHusky-cpp-Tutorial/blob/main/Structure.md)
1010

11-
正在疯狂赶进度,还要画好多插图,还要期末考试。现阶段争取保持每4天更新一章的速度。
11+
正在疯狂赶进度,还要画插图,还要期末考试。现阶段争取保持每4天更新一章的速度。
1212

1313
如果发现内容有任何疏漏和错误,欢迎来作补充和提出修改意见!可以直接提交到[Issues](https://github.com/cppHusky/cppHusky-cpp-Tutorial/issues)当中。

generalized_part.tex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ \part*{泛讲篇}
44
\import{generalized_parts/}{02_basic_operation_on_data.tex}
55
\import{generalized_parts/}{03_control_flow.tex}
66
\import{generalized_parts/}{04_introduction_to_functions.tex}
7-
\import{generalized_parts/}{05_compound_types_and_their_use.tex}
7+
\import{generalized_parts/}{05_compound_types_and_their_use.tex}
8+
\import{generalized_parts/}{06_custom_types_and_their_use.tex}

generalized_parts/05_compound_types_and_their_use.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ \chapter{复合类型及其使用}
99
\import{05_composite_types_and_their_use/}{04_one_dimensional_arrays.tex}
1010
\import{05_composite_types_and_their_use/}{05_string_with_arrays.tex}
1111
\import{05_composite_types_and_their_use/}{06_combination_of_pointers_and_arrays.tex}
12-
\import{05_composite_types_and_their_use/}{07_dynamic_memory_allocation.tex}
12+
\import{05_composite_types_and_their_use/}{07_dynamic_memory_allocation.tex}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
\chapter{自定义类型及其使用}
2+
迄今为止,我们遇到的各种类型都是C++提供给我们的。要么是基本类型,要么是指针、数组、引用这样的复合类型。类型(Type)与数据(Data)之间是类与对象的关系。一个数据只不过是内存中若干 \lstinline@0@ 和 \lstinline@1@ 的排列组合,倘若没有类型,程序就不知道如何把这些信息解释成有效内容。而对于同一串 \lstinline@0@/\lstinline@1@ 来说,如果类型不同,那么解释出来的信息也是不一样的。以下是一个例子:
3+
\begin{lstlisting}
4+
int n {0x63794b37}; //这是一个16进制字面量,其10进制为1668893495
5+
cout << (char*)&n; //以字符串形式输出
6+
\end{lstlisting}
7+
在某台电脑上,它的输出是\\\noindent\rule{\linewidth}{.2pt}\texttt{
8+
7KycT�\$��
9+
}\\\noindent\rule{\linewidth}{.2pt}
10+
为什么把 \lstinline@int*@ 类型转换成 \lstinline@char*@ 类型之后再输出就会得到这么奇怪的内容呢?原因就出在类型上。\par
11+
\begin{figure}[htbp]
12+
\centering
13+
\includegraphics[width=\textwidth]{../images/generalized_parts/06_0_1_string_to_int_or_char_300.png}
14+
\caption{对同一段比特串,不同类型会解读出不同内容}
15+
\end{figure}
16+
内存中的32个比特如图所示。如果用 \lstinline@int@ 类型去解读它,就会得到 \lstinline@1668893495@;而如果用 \lstinline@char@ 类型去解读它,就会分别得到四个字符 \lstinline@'7'@, \lstinline@'K'@, \lstinline@'y'@, \lstinline@'c'@。而当我们以 \lstinline@char*@ 类型输出时,因为这里没有结束符 \lstinline@'\0'@,所以它还会继续输出后面内存中的无意义内容,直到碰到结束符为止。\par
17+
所以我们可以认为,类型就是信息与二进制编码之间的一套转换方案。同样一串二进制编码,在不同类型下会解释出不同的信息——这也就是为什么我从第一章起就在强调``类型''\par
18+
那么言归正传(刚才的内容看不懂也没关系)。在本章,我将讲解如何利用基本数据类型和上一章中讲到的复合数据类型,来自创类型。我们不需要研究到比特这个层次,更不需要讲什么编码,我们拿C++现成的类型来组合就可以了。\par
19+
\import{06_custom_types_and_their_use/}{01_enum.tex}
20+
\import{06_custom_types_and_their_use/}{02_struct.tex}
21+
\import{06_custom_types_and_their_use/}{03_union.tex}
22+
\import{06_custom_types_and_their_use/}{04_introduction_to_class.tex}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
\section{枚举常量}

generalized_parts/06_custom_types_and_their_use/02_struct.tex

Whitespace-only changes.

generalized_parts/06_custom_types_and_their_use/03_union.tex

Whitespace-only changes.

generalized_parts/06_custom_types_and_their_use/04_introduction_to_class.tex

Whitespace-only changes.
33.6 KB
Loading
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<mxfile host="Electron" modified="2024-01-03T08:44:30.086Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.16 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="_Vfbv1T_KMo50NvngBUZ" version="22.1.16" type="device">
2+
<diagram name="Page-1" id="DyeiHg2SjiwmgYjPWZ9a">
3+
<mxGraphModel dx="752" dy="516" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
4+
<root>
5+
<mxCell id="0" />
6+
<mxCell id="1" parent="0" />
7+
<mxCell id="oLTtamxxTRQdmQDWv0TP-1" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
8+
<mxGeometry x="40" y="80" width="20" height="20" as="geometry" />
9+
</mxCell>
10+
<mxCell id="oLTtamxxTRQdmQDWv0TP-2" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
11+
<mxGeometry x="60" y="80" width="20" height="20" as="geometry" />
12+
</mxCell>
13+
<mxCell id="oLTtamxxTRQdmQDWv0TP-7" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
14+
<mxGeometry x="80" y="80" width="20" height="20" as="geometry" />
15+
</mxCell>
16+
<mxCell id="oLTtamxxTRQdmQDWv0TP-8" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
17+
<mxGeometry x="100" y="80" width="20" height="20" as="geometry" />
18+
</mxCell>
19+
<mxCell id="oLTtamxxTRQdmQDWv0TP-9" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
20+
<mxGeometry x="120" y="80" width="20" height="20" as="geometry" />
21+
</mxCell>
22+
<mxCell id="oLTtamxxTRQdmQDWv0TP-10" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
23+
<mxGeometry x="140" y="80" width="20" height="20" as="geometry" />
24+
</mxCell>
25+
<mxCell id="oLTtamxxTRQdmQDWv0TP-11" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
26+
<mxGeometry x="160" y="80" width="20" height="20" as="geometry" />
27+
</mxCell>
28+
<mxCell id="oLTtamxxTRQdmQDWv0TP-12" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
29+
<mxGeometry x="180" y="80" width="20" height="20" as="geometry" />
30+
</mxCell>
31+
<mxCell id="oLTtamxxTRQdmQDWv0TP-13" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
32+
<mxGeometry x="200" y="80" width="20" height="20" as="geometry" />
33+
</mxCell>
34+
<mxCell id="oLTtamxxTRQdmQDWv0TP-14" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
35+
<mxGeometry x="220" y="80" width="20" height="20" as="geometry" />
36+
</mxCell>
37+
<mxCell id="oLTtamxxTRQdmQDWv0TP-15" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
38+
<mxGeometry x="240" y="80" width="20" height="20" as="geometry" />
39+
</mxCell>
40+
<mxCell id="oLTtamxxTRQdmQDWv0TP-16" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
41+
<mxGeometry x="260" y="80" width="20" height="20" as="geometry" />
42+
</mxCell>
43+
<mxCell id="oLTtamxxTRQdmQDWv0TP-17" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
44+
<mxGeometry x="280" y="80" width="20" height="20" as="geometry" />
45+
</mxCell>
46+
<mxCell id="oLTtamxxTRQdmQDWv0TP-18" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
47+
<mxGeometry x="300" y="80" width="20" height="20" as="geometry" />
48+
</mxCell>
49+
<mxCell id="oLTtamxxTRQdmQDWv0TP-19" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
50+
<mxGeometry x="320" y="80" width="20" height="20" as="geometry" />
51+
</mxCell>
52+
<mxCell id="oLTtamxxTRQdmQDWv0TP-20" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
53+
<mxGeometry x="340" y="80" width="20" height="20" as="geometry" />
54+
</mxCell>
55+
<mxCell id="oLTtamxxTRQdmQDWv0TP-21" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
56+
<mxGeometry x="360" y="80" width="20" height="20" as="geometry" />
57+
</mxCell>
58+
<mxCell id="oLTtamxxTRQdmQDWv0TP-22" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
59+
<mxGeometry x="380" y="80" width="20" height="20" as="geometry" />
60+
</mxCell>
61+
<mxCell id="oLTtamxxTRQdmQDWv0TP-23" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
62+
<mxGeometry x="400" y="80" width="20" height="20" as="geometry" />
63+
</mxCell>
64+
<mxCell id="oLTtamxxTRQdmQDWv0TP-24" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
65+
<mxGeometry x="420" y="80" width="20" height="20" as="geometry" />
66+
</mxCell>
67+
<mxCell id="oLTtamxxTRQdmQDWv0TP-25" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
68+
<mxGeometry x="440" y="80" width="20" height="20" as="geometry" />
69+
</mxCell>
70+
<mxCell id="oLTtamxxTRQdmQDWv0TP-26" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
71+
<mxGeometry x="460" y="80" width="20" height="20" as="geometry" />
72+
</mxCell>
73+
<mxCell id="oLTtamxxTRQdmQDWv0TP-27" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
74+
<mxGeometry x="480" y="80" width="20" height="20" as="geometry" />
75+
</mxCell>
76+
<mxCell id="oLTtamxxTRQdmQDWv0TP-28" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
77+
<mxGeometry x="500" y="80" width="20" height="20" as="geometry" />
78+
</mxCell>
79+
<mxCell id="oLTtamxxTRQdmQDWv0TP-29" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
80+
<mxGeometry x="520" y="80" width="20" height="20" as="geometry" />
81+
</mxCell>
82+
<mxCell id="oLTtamxxTRQdmQDWv0TP-30" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
83+
<mxGeometry x="540" y="80" width="20" height="20" as="geometry" />
84+
</mxCell>
85+
<mxCell id="oLTtamxxTRQdmQDWv0TP-31" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
86+
<mxGeometry x="560" y="80" width="20" height="20" as="geometry" />
87+
</mxCell>
88+
<mxCell id="oLTtamxxTRQdmQDWv0TP-32" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
89+
<mxGeometry x="580" y="80" width="20" height="20" as="geometry" />
90+
</mxCell>
91+
<mxCell id="oLTtamxxTRQdmQDWv0TP-33" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
92+
<mxGeometry x="600" y="80" width="20" height="20" as="geometry" />
93+
</mxCell>
94+
<mxCell id="oLTtamxxTRQdmQDWv0TP-34" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
95+
<mxGeometry x="620" y="80" width="20" height="20" as="geometry" />
96+
</mxCell>
97+
<mxCell id="oLTtamxxTRQdmQDWv0TP-35" value="&lt;font face=&quot;consolas&quot;&gt;1&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
98+
<mxGeometry x="640" y="80" width="20" height="20" as="geometry" />
99+
</mxCell>
100+
<mxCell id="oLTtamxxTRQdmQDWv0TP-36" value="&lt;font face=&quot;consolas&quot;&gt;0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
101+
<mxGeometry x="660" y="80" width="20" height="20" as="geometry" />
102+
</mxCell>
103+
</root>
104+
</mxGraphModel>
105+
</diagram>
106+
</mxfile>

0 commit comments

Comments
 (0)