Skip to content

Commit 6e1fd09

Browse files
authored
Update design_concept.md
1 parent 900b641 commit 6e1fd09

File tree

1 file changed

+74
-3
lines changed

1 file changed

+74
-3
lines changed

docs/design_concept.md

+74-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,81 @@
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

1182
TODO

0 commit comments

Comments
 (0)