Skip to content

Commit 5e5c115

Browse files
committed
deploy: 6e1fd09
1 parent 5ecb6fa commit 5e5c115

File tree

5 files changed

+135
-27
lines changed

5 files changed

+135
-27
lines changed

design_concept/index.html

+66-16
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,6 @@
244244

245245
<li class="nav-item" data-bs-level="1"><a href="#c20-concept" class="nav-link">鸭子类型与 C++20 concept (未完工)</a>
246246
<ul class="nav flex-column">
247-
<li class="nav-item" data-bs-level="2"><a href="#_1" class="nav-link">虚函数的缺点</a>
248-
<ul class="nav flex-column">
249-
</ul>
250-
</li>
251-
<li class="nav-item" data-bs-level="2"><a href="#_2" class="nav-link">模板函数的缺点</a>
252-
<ul class="nav flex-column">
253-
</ul>
254-
</li>
255247
</ul>
256248
</li>
257249
</ul>
@@ -262,16 +254,74 @@
262254
<h1 id="c20-concept">鸭子类型与 C++20 concept (未完工)</h1>
263255
<div class="toc">
264256
<ul>
265-
<li><a href="#c20-concept">鸭子类型与 C++20 concept (未完工)</a><ul>
266-
<li><a href="#_1">虚函数的缺点</a></li>
267-
<li><a href="#_2">模板函数的缺点</a></li>
268-
</ul>
269-
</li>
257+
<li><a href="#c20-concept">鸭子类型与 C++20 concept (未完工)</a></li>
270258
</ul>
271259
</div>
272-
<h2 id="_1">虚函数的缺点</h2>
273-
<p>TODO</p>
274-
<h2 id="_2">模板函数的缺点</h2>
260+
<p>如果一个东西叫起来像一只鸭,走起路来像一只鸭,那么不妨认为他就是一只鸭。</p>
261+
<p>我们有三种类型的狗:拉布拉多犬,藏獒,张心欣。</p>
262+
<blockquote>
263+
<p><img src="../img/awesomeface.png" height="30px" width="auto" style="margin: 0; border: none"/> 请勿侮辱拉布拉多和藏獒!</p>
264+
</blockquote>
265+
<p>他们有一个共同点,那就是它们都会狗叫(bark)以及自我介绍(intro)。</p>
266+
<pre><code class="language-cpp">struct Labrador {
267+
void intro() {
268+
puts(&quot;我能帮你捡回棍棍!&quot;);
269+
}
270+
271+
void bark() {
272+
puts(&quot;汪汪!&quot;);
273+
}
274+
};
275+
276+
struct Mastiff {
277+
void intro() {
278+
puts(&quot;我能保卫国王荣耀!&quot;);
279+
}
280+
281+
void bark() {
282+
puts(&quot;汪汪!&quot;);
283+
}
284+
};
285+
286+
struct Xinxin {
287+
void intro() {
288+
puts(&quot;我能祝您裁员滚滚!&quot;);
289+
}
290+
291+
void bark() {
292+
puts(&quot;从未贡献任何核心功能!&quot;);
293+
}
294+
};
295+
</code></pre>
296+
<p>现在,我们需要设计一个“饲养员”函数,他会让狗狗先自我介绍,然后叫两声。</p>
297+
<p>传统的基于重载的写法,需要连续写三个一模一样的函数体,非常麻烦,违反“避免重复”原则,不利于代码未来的维护。</p>
298+
<pre><code class="language-cpp">void feeder(Labrador dog) {
299+
dog.intro();
300+
dog.bark();
301+
dog.bark();
302+
}
303+
304+
void feeder(Mastiff dog) {
305+
dog.intro();
306+
dog.bark();
307+
dog.bark();
308+
}
309+
310+
void feeder(Xinxin dog) {
311+
dog.intro();
312+
dog.bark();
313+
dog.bark();
314+
}
315+
</code></pre>
316+
<p>方案1:模板函数</p>
317+
<pre><code class="language-cpp">template &lt;typename Dog&gt;
318+
void feeder(Dog dog) {
319+
dog.intro();
320+
dog.bark();
321+
dog.bark();
322+
}
323+
</code></pre>
324+
<p>此处把 <code>Dog</code> 定义为模板函数</p>
275325
<p>TODO</p></div>
276326
</div>
277327
</div>

index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ <h2 id="_1">前言</h2>
292292
<blockquote>
293293
<p><img src="./img/bulb.png" height="30px" width="auto" style="margin: 0; border: none"/> 本书还在持续更新中……要追番的话,可以在 <a href="https://github.com/parallel101/cppguidebook">GitHub</a> 点一下右上角的 “Watch” 按钮,每当小彭老师提交新 commit,GitHub 会向你发送一封电子邮件,提醒你小彭老师更新了。</p>
294294
</blockquote>
295-
<p>更新时间:2024年10月26日 15:20:27 (UTC+08:00)</p>
295+
<p>更新时间:2024年10月31日 13:23:02 (UTC+08:00)</p>
296296
<p><a href="https://parallel101.github.io/cppguidebook">在 GitHub Pages 浏览本书</a> | <a href="https://142857.red/book">在小彭老师自己维护的镜像上浏览本书</a></p>
297297
<h2 id="_2">格式约定</h2>
298298
<blockquote>

print_page/index.html

+67-9
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ <h2 id="index-_1">前言</h2>
421421
<blockquote>
422422
<p><img src="../img/bulb.png" height="30px" width="auto" style="margin: 0; border: none"/> 本书还在持续更新中……要追番的话,可以在 <a href="https://github.com/parallel101/cppguidebook">GitHub</a> 点一下右上角的 “Watch” 按钮,每当小彭老师提交新 commit,GitHub 会向你发送一封电子邮件,提醒你小彭老师更新了。</p>
423423
</blockquote>
424-
<p>更新时间:2024年10月26日 15:20:27 (UTC+08:00)</p>
424+
<p>更新时间:2024年10月31日 13:23:02 (UTC+08:00)</p>
425425
<p><a href="https://parallel101.github.io/cppguidebook">在 GitHub Pages 浏览本书</a> | <a href="https://142857.red/book">在小彭老师自己维护的镜像上浏览本书</a></p>
426426
<h2 id="index-_2">格式约定</h2>
427427
<blockquote>
@@ -14334,16 +14334,74 @@ <h2 id="design_erasure-_2">虚函数的缺点</h2>
1433414334
<p>TODO</p></section><section class="print-page" id="design_concept"><h1 id="design_concept-c20-concept">鸭子类型与 C++20 concept (未完工)</h1>
1433514335
<div class="toc">
1433614336
<ul>
14337-
<li><a href="#design_concept-c20-concept">鸭子类型与 C++20 concept (未完工)</a><ul>
14338-
<li><a href="#design_concept-_1">虚函数的缺点</a></li>
14339-
<li><a href="#design_concept-_2">模板函数的缺点</a></li>
14340-
</ul>
14341-
</li>
14337+
<li><a href="#design_concept-c20-concept">鸭子类型与 C++20 concept (未完工)</a></li>
1434214338
</ul>
1434314339
</div>
14344-
<h2 id="design_concept-_1">虚函数的缺点</h2>
14345-
<p>TODO</p>
14346-
<h2 id="design_concept-_2">模板函数的缺点</h2>
14340+
<p>如果一个东西叫起来像一只鸭,走起路来像一只鸭,那么不妨认为他就是一只鸭。</p>
14341+
<p>我们有三种类型的狗:拉布拉多犬,藏獒,张心欣。</p>
14342+
<blockquote>
14343+
<p><img src="../img/awesomeface.png" height="30px" width="auto" style="margin: 0; border: none"/> 请勿侮辱拉布拉多和藏獒!</p>
14344+
</blockquote>
14345+
<p>他们有一个共同点,那就是它们都会狗叫(bark)以及自我介绍(intro)。</p>
14346+
<pre><code class="language-cpp">struct Labrador {
14347+
void intro() {
14348+
puts(&quot;我能帮你捡回棍棍!&quot;);
14349+
}
14350+
14351+
void bark() {
14352+
puts(&quot;汪汪!&quot;);
14353+
}
14354+
};
14355+
14356+
struct Mastiff {
14357+
void intro() {
14358+
puts(&quot;我能保卫国王荣耀!&quot;);
14359+
}
14360+
14361+
void bark() {
14362+
puts(&quot;汪汪!&quot;);
14363+
}
14364+
};
14365+
14366+
struct Xinxin {
14367+
void intro() {
14368+
puts(&quot;我能祝您裁员滚滚!&quot;);
14369+
}
14370+
14371+
void bark() {
14372+
puts(&quot;从未贡献任何核心功能!&quot;);
14373+
}
14374+
};
14375+
</code></pre>
14376+
<p>现在,我们需要设计一个“饲养员”函数,他会让狗狗先自我介绍,然后叫两声。</p>
14377+
<p>传统的基于重载的写法,需要连续写三个一模一样的函数体,非常麻烦,违反“避免重复”原则,不利于代码未来的维护。</p>
14378+
<pre><code class="language-cpp">void feeder(Labrador dog) {
14379+
dog.intro();
14380+
dog.bark();
14381+
dog.bark();
14382+
}
14383+
14384+
void feeder(Mastiff dog) {
14385+
dog.intro();
14386+
dog.bark();
14387+
dog.bark();
14388+
}
14389+
14390+
void feeder(Xinxin dog) {
14391+
dog.intro();
14392+
dog.bark();
14393+
dog.bark();
14394+
}
14395+
</code></pre>
14396+
<p>方案1:模板函数</p>
14397+
<pre><code class="language-cpp">template &lt;typename Dog&gt;
14398+
void feeder(Dog dog) {
14399+
dog.intro();
14400+
dog.bark();
14401+
dog.bark();
14402+
}
14403+
</code></pre>
14404+
<p>此处把 <code>Dog</code> 定义为模板函数</p>
1434714405
<p>TODO</p></section><section class="print-page" id="error_code"><h1 id="error_code-c">现代 C++ 错误处理知多少(未完工)</h1>
1434814406
<p>配套视频:<a href="https://www.bilibili.com/video/BV1QpWSekEJY">BV1QpWSekEJY</a></p>
1434914407
<div class="toc">

search/search_index.json

+1-1
Large diffs are not rendered by default.

sitemap.xml.gz

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)