File tree Expand file tree Collapse file tree 1 file changed +74
-3
lines changed Expand file tree Collapse file tree 1 file changed +74
-3
lines changed Original file line number Diff line number Diff line change 22
33[ TOC]
44
5- ## 虚函数的缺点
5+ 如果一个东西叫起来像一只鸭,走起路来像一只鸭,那么不妨认为他就是一只鸭。
66
7- TODO
7+ 我们有三种类型的狗:拉布拉多犬,藏獒,张心欣。
8+
9+ > {{ icon.fun }} 请勿侮辱拉布拉多和藏獒!
10+
11+ 他们有一个共同点,那就是它们都会狗叫(bark)以及自我介绍(intro)。
12+
13+ ``` cpp
14+ struct Labrador {
15+ void intro() {
16+ puts("我能帮你捡回棍棍!");
17+ }
18+
19+ void bark() {
20+ puts("汪汪!");
21+ }
22+ };
23+
24+ struct Mastiff {
25+ void intro() {
26+ puts("我能保卫国王荣耀!");
27+ }
28+
29+ void bark() {
30+ puts("汪汪!");
31+ }
32+ };
33+
34+ struct Xinxin {
35+ void intro() {
36+ puts("我能祝您裁员滚滚!");
37+ }
38+
39+ void bark() {
40+ puts("从未贡献任何核心功能!");
41+ }
42+ };
43+ ```
44+
45+ 现在,我们需要设计一个“饲养员”函数,他会让狗狗先自我介绍,然后叫两声。
46+
47+ 传统的基于重载的写法,需要连续写三个一模一样的函数体,非常麻烦,违反“避免重复”原则,不利于代码未来的维护。
48+
49+ ``` cpp
50+ void feeder (Labrador dog) {
51+ dog.intro();
52+ dog.bark();
53+ dog.bark();
54+ }
55+
56+ void feeder(Mastiff dog) {
57+ dog.intro();
58+ dog.bark();
59+ dog.bark();
60+ }
61+
62+ void feeder(Xinxin dog) {
63+ dog.intro();
64+ dog.bark();
65+ dog.bark();
66+ }
67+ ```
68+
69+ 方案1:模板函数
70+
71+ ```cpp
72+ template <typename Dog>
73+ void feeder(Dog dog) {
74+ dog.intro();
75+ dog.bark();
76+ dog.bark();
77+ }
78+ ```
879
9- ## 模板函数的缺点
80+ 此处把 ` Dog ` 定义为模板函数
1081
1182TODO
You can’t perform that action at this time.
0 commit comments