﻿1
00:00:04,470 --> 00:00:08,280
‫เราจึงรู้ว่าเราต้องการส่วนประกอบบางอย่างบนฐาน -- คลาสของเรา

2
00:00:08,280 --> 00:00:12,570
‫เรารู้ว่าเราต้องการตาข่ายฐานสำหรับส่วนล่างของถังและป้อมปืน

3
00:00:12,600 --> 00:00:15,270
‫เราต้องการตาข่ายป้อมปืนสำหรับส่วนบนด้วย

4
00:00:15,300 --> 00:00:19,500
‫เราจำเป็นต้องมีแคปซูลเพื่อรับมือกับการชนกัน และเราต้องการจุดวางไข่ของโพรเจกไทล์

5
00:00:19,500 --> 00:00:21,270
‫นั่นจะเป็นองค์ประกอบฉาก

6
00:00:21,300 --> 00:00:28,320
‫เมื่อเราเพิ่มสิ่งเหล่านี้ลงในคลาสพ็อดพื้นฐานแล้ว อะไรก็ตามที่เราสร้างโดยอิงจากคลาสนี้จะสืบทอดสิ่งเหล่านั้น

7
00:00:28,320 --> 00:00:34,920
‫ดังนั้นเราจึงสามารถสร้างรถถังตามฐาน -- จากนั้นเราก็ไปสร้างหอคอยตามฐานด้วย

8
00:00:34,920 --> 00:00:35,550
‫--

9
00:00:35,700 --> 00:00:39,620
‫และเนื่องจากพวกมันอยู่บนพื้นฐานของพ็อดฐาน พวกเขาจึงสืบทอดส่วนประกอบเหล่านี้

10
00:00:39,630 --> 00:00:46,800
‫รถถังสามารถมีตาข่ายฐาน ตาข่ายป้อมปืน แคปซูลของตัวเอง และจุดวางไข่ของกระสุนปืน

11
00:00:46,800 --> 00:00:53,370
‫และในทำนองเดียวกัน หอคอยจะได้รับส่วนประกอบแคปซูลตาข่ายป้อมปืนฐานและจุดวางไข่ของโพรเจกไทล์เช่นกัน

12
00:00:53,370 --> 00:00:58,560
‫และในไม่ช้าเราจะเห็นวิธีที่เราสามารถกำหนดตาข่ายต่างๆ ให้กับแต่ละตาข่ายเพื่อให้ดูแตกต่างกัน

13
00:00:58,560 --> 00:01:00,750
‫ดังนั้นเราจึงรู้ว่าเราต้องการส่วนประกอบบางอย่าง

14
00:01:00,750 --> 00:01:05,490
‫ตอนนี้ได้เวลาเพิ่มส่วนประกอบบางอย่างลงในคลาสพื้นฐานของเราแล้ว

15
00:01:05,910 --> 00:01:12,240
‫ตามค่าเริ่มต้นแล้ว เรามีส่วนสาธารณะ ส่วนที่ได้รับการคุ้มครอง และส่วนสาธารณะส่วนที่สองอยู่ที่นี่แล้ว

16
00:01:12,570 --> 00:01:17,520
‫มีหลายสาเหตุที่ต้องมีส่วนสาธารณะหลายส่วน และเราจะพูดถึงส่วนเหล่านั้นในภายหลัง

17
00:01:17,520 --> 00:01:20,880
‫แต่สำหรับคอมโพเนนต์ของเรา เราจะสร้างส่วนส่วนตัว

18
00:01:22,070 --> 00:01:31,790
‫ดังที่คุณได้เรียนรู้ไปก่อนหน้านี้ เป็นการดีที่จะมีตัวแปรของสมาชิกเป็นแบบส่วนตัว เพื่อให้สามารถเข้าถึงได้จากภายในชั้นเรียนที่เป็นเจ้าของเท่านั้น

19
00:01:31,790 --> 00:01:33,410
‫ดังนั้นเราจึงต้องการส่วนประกอบบางอย่าง

20
00:01:33,680 --> 00:01:36,190
‫อันแรกที่ฉันจะเพิ่มคือแคปซูล

21
00:01:36,200 --> 00:01:40,760
‫มาสร้างตัวแปรประเภทส่วนประกอบแคปซูลกันเถอะ

22
00:01:42,160 --> 00:01:44,030
‫ทีนี้ นี่จะเป็นตัวชี้

23
00:01:44,070 --> 00:01:48,880
‫เราจะใช้พอยน์เตอร์สำหรับตัวแปรส่วนใหญ่ตราบใดที่ไม่ใช่ประเภทฐาน เช่น

24
00:01:48,880 --> 00:01:50,340
‫จำนวนเต็มหรือทศนิยม

25
00:01:50,350 --> 00:01:56,860
‫และอย่างที่คุณทราบ นั่นเป็นเพราะว่าพอยน์เตอร์มีขนาดเล็ก พวกมันเป็นเพียงแอดเดรส และช่วยให้เรามีประสิทธิภาพมากขึ้น

26
00:01:56,950 --> 00:02:04,030
‫เรามีตัวชี้ส่วนประกอบแคปซูล U และเราจะเรียกชื่อย่อของแคปซูลนี้ว่าส่วนประกอบแคปซูล

27
00:02:04,030 --> 00:02:14,020
‫ตอนนี้ เหนือองค์ประกอบแคปซูล เราจะเพิ่มมาโครเฉพาะเครื่องยนต์ที่ไม่จริง และมันเป็นคุณสมบัติของคุณในแคปทั้งหมดที่มีวงเล็บของมันเอง

28
00:02:14,020 --> 00:02:20,590
‫คุณสมบัติของคุณเป็นวิธีหนึ่งในการทำให้ Unreal Engine รับรู้ถึงตัวแปรนี้ เพื่อให้สามารถเข้าร่วมใน Unreal Engine

29
00:02:20,590 --> 00:02:20,980
‫ได้

30
00:02:20,980 --> 00:02:22,240
‫ระบบสะท้อนแสง.

31
00:02:22,690 --> 00:02:28,750
‫ระบบสะท้อนกลับช่วยให้เราสามารถทำสิ่งต่างๆ เช่น เปิดเผยตัวแปรนี้ต่อพิมพ์เขียว และมีส่วนร่วมในการรวบรวมขยะและสิ่งต่างๆ

32
00:02:28,750 --> 00:02:31,060
‫เช่นนั้น

33
00:02:31,060 --> 00:02:36,400
‫ดังนั้นการเพิ่มคุณสมบัติ you จะเป็นสิ่งที่จะเพิ่มให้กับส่วนประกอบของเราเมื่อเราสร้างมันขึ้นมา

34
00:02:36,400 --> 00:02:44,860
‫ดังนั้นเราจึงมีส่วนประกอบแคปซูลนี้ และเนื่องจากเรากำลังใช้ส่วนประกอบแคปซูล YOU เราจึงต้องแจ้งให้คอมไพเลอร์ทราบเกี่ยวกับประเภทนี้

35
00:02:44,860 --> 00:02:48,250
‫ไม่ทราบโดยปริยายว่าส่วนประกอบของแคปซูลคืออะไร

36
00:02:48,250 --> 00:02:54,640
‫ปกติแล้วจะบอกคอมไพเลอร์ว่าส่วนประกอบแคปซูลคืออะไร เราจะรวมไฟล์ส่วนหัวไว้ด้านบนนี้พร้อมกับคำสั่งรวมของเรา

37
00:02:54,640 --> 00:02:59,680
‫หากเราไปที่เอกสารประกอบเครื่องยนต์ที่ไม่จริงและค้นหาส่วนประกอบแคปซูลของคุณ

38
00:02:59,710 --> 00:03:08,950
‫เราจะเห็นได้จากที่ที่มันบอก รวมไฟล์ส่วนหัวที่เราจะต้องรวมไว้เพื่อบอกคอมไพเลอร์เกี่ยวกับส่วนประกอบแคปซูล

39
00:03:08,950 --> 00:03:13,000
‫ตอนนี้เราสามารถรวมนี่ไว้ตรงนี้ที่ด้านบนแล้วตามด้วย U ของเรา

40
00:03:13,000 --> 00:03:18,160
‫คอมไพเลอร์จะรู้จักประเภทส่วนประกอบแคปซูลและทุกอย่างจะดูน่าเบื่อ

41
00:03:18,220 --> 00:03:25,720
‫แต่โดยทั่วไป แนวปฏิบัติที่ดีในการเขียนโค้ดสิ่งเหล่านี้คือพยายามทำให้ไฟล์ส่วนหัวนี้มีขนาดเล็กที่สุด

42
00:03:25,720 --> 00:03:32,380
‫เมื่อใดก็ตามที่เรารวมไฟล์ส่วนหัวในไฟล์นี้ โปรแกรมที่เรียกว่าตัวประมวลผลล่วงหน้าจะนำเนื้อหาทั้งหมดของไฟล์ส่วนหัวนั้น

43
00:03:32,380 --> 00:03:40,780
‫แยกข้อมูลบางอย่าง เช่น ความคิดเห็น จากนั้นจึงวางเนื้อหาทั้งหมดของไฟล์ส่วนหัวนั้นลงในไฟล์นี้

44
00:03:41,050 --> 00:03:47,530
‫ผลที่ได้คือไฟล์นี้มีขนาดใหญ่ขึ้นเพราะมีเนื้อหาของไฟล์ที่รวมอยู่นั้นมาวางที่นี่

45
00:03:47,530 --> 00:03:50,950
‫เราต้องการรวมสิ่งต่าง ๆ เมื่อเราใช้งานเท่านั้น

46
00:03:50,950 --> 00:03:56,740
‫แล้วเราจะหนีโดยไม่รวมไฟล์ส่วนหัวที่นี่ในฐาน -- ส่วนหัวได้อย่างไร

47
00:03:56,740 --> 00:04:02,380
‫เราสามารถใช้บางสิ่งใน C++ ที่เรียกว่า Forward declaration

48
00:04:02,380 --> 00:04:07,990
‫เราส่งต่อประกาศประเภทส่วนประกอบแคปซูล u โดยใช้คีย์เวิร์ดคลาสเช่นนี้

49
00:04:08,470 --> 00:04:18,010
‫โปรดสังเกตว่าตอนนี้คอมไพเลอร์แสดงประเภทนี้เป็นสีเขียวเมื่อใดก็ตามที่เราส่งต่อประกาศตัวแปร จากนั้นจะหนีไปได้โดยไม่รวมไฟล์ส่วนหัว

50
00:04:18,010 --> 00:04:26,170
‫มันกำลังบอกคอมไพเลอร์ว่านี่เป็นประเภท ดังนั้นมันจะไม่ให้ข้อผิดพลาด IntelliSense แก่เราอีกต่อไป โดยบอกว่าไม่รู้จักสิ่งนี้ว่าเป็นประเภท

51
00:04:26,170 --> 00:04:28,150
‫ตอนนี้เป็นประเภทที่ไม่สมบูรณ์

52
00:04:28,150 --> 00:04:34,150
‫หากเราพยายามใช้ประเภทนี้จริง ๆ โดยการเข้าถึงสมาชิก เช่น ฟังก์ชันและตัวแปร หรือพยายามสร้างวัตถุประเภทนี้

53
00:04:34,150 --> 00:04:38,560
‫เราจะได้รับข้อผิดพลาดเนื่องจากเป็นประเภทที่ไม่สมบูรณ์

54
00:04:38,560 --> 00:04:48,400
‫เราจะต้องมีไฟล์ส่วนหัวรวมอยู่ด้วยทุกที่ที่เราใช้ประเภทนี้เพื่อทำสิ่งเหล่านั้น เพื่อให้เราสามารถส่งต่อประกาศตัวชี้ประเภทเพื่อหลีกเลี่ยงการใช้ไฟล์ส่วนหัว

55
00:04:48,400 --> 00:04:53,230
‫แต่สิ่งสำคัญคือต้องทราบว่าเราต้องการไฟล์ส่วนหัวเพื่อสืบทอดจากคลาสใดคลาสหนึ่ง

56
00:04:53,230 --> 00:05:00,130
‫สังเกตว่าคลาสนี้สืบทอดมาจากบ่อและไฟล์ส่วนหัวของบ่อรวมอยู่ที่ด้านบนนี้

57
00:05:00,130 --> 00:05:05,470
‫ดังนั้นการสืบทอดจึงต้องการไฟล์ส่วนหัวสำหรับประเภทที่เราได้รับ

58
00:05:05,470 --> 00:05:09,100
‫เรามาคุยกันเรื่อง Forward Declaration และเหตุผลที่เราต้องการจะทำ

59
00:05:09,130 --> 00:05:17,020
‫สมมติว่าเรามีคลาสที่เรียกว่า Base Pon ซึ่งจำเป็นต้องมีตัวแปรตัวชี้ประเภทส่วนประกอบแคปซูลของคุณ

60
00:05:17,050 --> 00:05:22,060
‫ตอนนี้ส่วนประกอบแคปซูลของคุณอยู่ในไฟล์ส่วนหัวของส่วนประกอบแคปซูล

61
00:05:22,060 --> 00:05:28,470
‫ตอนนี้เรากำลังจะใช้ประเภทนี้โดยพิจารณาจากเวลาที่เราสร้างวัตถุของ U

62
00:05:28,480 --> 00:05:30,010
‫ชนิดส่วนประกอบแคปซูล

63
00:05:30,010 --> 00:05:36,820
‫ดังนั้นโดยพื้นฐานแล้วเราต้องการเพียงตัวชี้ของส่วนประกอบแคปซูลประเภท U

64
00:05:37,000 --> 00:05:45,160
‫ตอนนี้ความจริงอิงจาก H ไม่ต้องการรายละเอียดการใช้งานของคลาสส่วนประกอบแคปซูล

65
00:05:45,160 --> 00:05:51,820
‫กล่าวอีกนัยหนึ่ง ไม่จำเป็นต้องรู้ว่าฟังก์ชันถูกกำหนดอย่างไร หรือแม้แต่คลาสส่วนประกอบแคปซูลใหญ่เพียงใด

66
00:05:51,850 --> 00:05:55,750
‫ตัวชี้ส่วนประกอบแคปซูลมีขนาดเดียวกับตัวชี้อื่นๆ

67
00:05:55,750 --> 00:05:57,250
‫มันเป็นแค่ที่อยู่

68
00:05:57,250 --> 00:05:58,810
‫ตอนนี้อยู่ในคลาสแผนพื้นฐาน

69
00:05:58,810 --> 00:06:01,420
‫เราต้องการสร้างส่วนประกอบแคปซูล

70
00:06:01,510 --> 00:06:09,790
‫ด้วยเหตุนี้ เราจึงจำเป็นต้องทราบขนาดของส่วนประกอบแคปซูลเพื่อจัดวางหน่วยความจำที่จำเป็นสำหรับการสร้างวัตถุนี้

71
00:06:09,790 --> 00:06:16,330
‫ดังนั้นในขณะที่ส่วนหัวของส่วนประกอบแคปซูลไม่จำเป็นในฐาน Ponca อย่างเคร่งครัด แต่จำเป็นอย่างยิ่งในฐาน

72
00:06:16,350 --> 00:06:24,970
‫แนวทางปฏิบัติในการเขียนโปรแกรมที่ดีของ Porkpie คือการรวมส่วนหัวที่คุณต้องการจริงๆ เท่านั้น เพื่อที่เราจะสามารถหลีกเลี่ยงโดยการประกาศตัวชี้ของตัวชี้ส่วนประกอบแคปซูลประเภท

73
00:06:24,970 --> 00:06:41,020
‫U ในผลิตภัณฑ์หลัก H แล้วรวมส่วนประกอบแคปซูลที่เราต้องการรายละเอียดการใช้งานเพราะเรากำลังสร้าง ส่วนประกอบของแคปซูลและเราจำเป็นต้องรู้ขนาดของ a.

74
00:06:41,310 --> 00:06:43,230
‫ส่วนประกอบแคปซูลในหน่วยความจำ

75
00:06:43,350 --> 00:06:49,920
‫ตอนนี้ เรามาพูดถึงผลที่ตามมาของการรวมไฟล์ส่วนหัวใน base pond FX แทน

76
00:06:50,010 --> 00:06:55,410
‫ดังที่เราได้เห็น เราทำสิ่งนี้ได้อย่างแน่นอน และคุณอาจกำลังคิดว่า เรารวมมันไว้ใน pont pont

77
00:06:55,410 --> 00:07:01,230
‫CP อยู่แล้ว แล้วมันจะสร้างความแตกต่างอย่างไรหากเรารวมมันไว้ในไฟล์หนึ่งกับอีกไฟล์หนึ่ง?

78
00:07:01,260 --> 00:07:03,180
‫นี่คือที่มาของปัญหา

79
00:07:03,210 --> 00:07:07,390
‫ไฟล์ส่วนหัวได้รับการออกแบบให้รวมไว้ในไฟล์อื่น

80
00:07:07,410 --> 00:07:12,810
‫สมมติว่าเรามี Base Pond H และเราได้รวมส่วนประกอบของแคปซูลเข้าไปด้วย

81
00:07:12,810 --> 00:07:18,600
‫แล้วต่อไปตามถนน เรามีคลาสอื่น ๆ และเราจะมีพอยน์เตอร์บ่อฐานในคลาสอื่น

82
00:07:18,600 --> 00:07:23,370
‫ๆ เหมือนกับที่เรามีพอยน์เตอร์ส่วนประกอบแคปซูลในเบสพอด

83
00:07:23,400 --> 00:07:28,230
‫ตอนนี้ แทนที่จะต้องผ่านปัญหาในการส่งต่อตัวชี้บ่อฐานและคลาสอื่นๆ

84
00:07:28,230 --> 00:07:33,810
‫เราแค่จะประกาศให้เป็นปกติและรวมจำนำพื้นฐานในคลาสอื่นด้วย

85
00:07:34,680 --> 00:07:43,190
‫ดังนั้นตอนนี้ Base Pond H ไม่เพียงแต่รวมส่วนหัวของส่วนประกอบแคปซูล ซึ่งส่งผลให้มีการคัดลอกโค้ดเพิ่มเติมลงในไฟล์ส่วนหัวนั้น

86
00:07:43,200 --> 00:07:47,820
‫ขณะนี้มีคลาสอื่น ๆ ซึ่งรวมถึงส่วนประกอบแคปซูล

87
00:07:47,820 --> 00:07:56,400
‫ดังนั้นเนื้อหาและส่วนประกอบของแคปซูลทั้งหมดจึงอยู่ในคลาส H อื่น ๆ และไม่จำเป็นแม้แต่น้อย

88
00:07:56,400 --> 00:08:01,910
‫คลาสอื่นๆ ที่ H ต้องการทราบเกี่ยวกับพื้นฐานเท่านั้น โดยไม่สนใจส่วนประกอบแคปซูล

89
00:08:01,920 --> 00:08:13,680
‫สมมติว่าเราดำเนินรูปแบบนี้ต่อไปและสร้างคลาสอื่นที่เรียกว่าคลาสอื่น และคลาสอื่นอาจจำเป็นต้องมีตัวชี้ประเภทบางคลาสในตอนนี้แทนที่จะประกาศไปข้างหน้า

90
00:08:13,680 --> 00:08:21,180
‫เราแค่รวมคลาส H อื่นๆ ไว้ในคลาส H อีกคลาส และตอนนี้รวมอยู่ในคลาส H อีกคลาสหนึ่ง

91
00:08:21,210 --> 00:08:32,730
‫แม้ว่าเราจะไม่ต้องการส่วนหัวสำหรับส่วนประกอบในบ่อฐานหรือส่วนประกอบแคปซูล H เราก็ได้มันในคลาสอื่นเพราะคลาสอื่นมีไฟล์ส่วนหัวเหล่านั้นอยู่ภายใน

92
00:08:32,730 --> 00:08:40,140
‫ดังนั้นเราจึงมีสำเนาของเนื้อหาทั้งหมดของส่วนประกอบแคปซูลและอิงตาม H เพิ่งติดอยู่ที่นี่ในอีกคลาสหนึ่ง

93
00:08:40,140 --> 00:08:46,620
‫ทำให้ไฟล์นั้นบวมและเพิ่มเวลารวบรวมทั้งหมดเพราะเราไม่ได้ส่งต่อประกาศ

94
00:08:46,620 --> 00:08:52,440
‫ดังนั้นสิ่งที่ดีกว่าที่ต้องทำคือรวมไฟล์ส่วนหัวไว้ในที่ที่จำเป็นจริงๆ

95
00:08:52,440 --> 00:08:59,610
‫ดังนั้น หากเราใช้ส่วนประกอบแคปซูลและรวมไว้โดยอิงตาม CPP เท่านั้น เมื่อเราสร้างคลาสอื่นและจำเป็นต้องใช้พ็อดฐานจริงๆ

96
00:08:59,610 --> 00:09:13,440
‫เราสามารถรวมส่วนหัวที่นั่นและฐานตาม ไม่รวมส่วนประกอบแคปซูล ดังนั้นรหัสพิเศษทั้งหมดจึงไม่รวมอยู่ในชั้นเรียนอื่น

97
00:09:13,440 --> 00:09:18,810
‫แล้วเมื่อเราไปสร้างอีกคลาสหนึ่งที่ต้องการคลาสอื่น เราสามารถรวมคลาสอื่นที่

98
00:09:18,810 --> 00:09:24,990
‫h อยู่ในอีกคลาสหนึ่งที่ CPP ที่จำเป็นจริงๆ และอีกคลาสที่ H ไม่ได้เต็มไปด้วยเนื้อหาของ

99
00:09:24,990 --> 00:09:30,270
‫ไฟล์ส่วนหัวอื่น ๆ ที่ไม่ต้องการ

100
00:09:30,270 --> 00:09:38,670
‫ดังนั้นเมื่อคลาสมีการขึ้นต่อกันเช่นนี้ขึ้นอยู่กับการขึ้นกับส่วนประกอบแคปซูล เป็นการดีที่สุดที่จะรักษาการขึ้นต่อกันเหล่านั้นให้น้อยที่สุด

101
00:09:38,880 --> 00:09:42,570
‫ฉันจะขอท้าให้คุณสร้างข้อผิดพลาดในการคอมไพล์

102
00:09:42,570 --> 00:09:44,970
‫เราไม่ควรกลัวข้อผิดพลาดในการรวบรวม

103
00:09:44,970 --> 00:09:47,550
‫สิ่งเหล่านี้เป็นเพียงส่วนหนึ่งของกระบวนการพัฒนา

104
00:09:47,550 --> 00:09:56,160
‫ดังนั้นเราจะสร้างมันขึ้นมาโดยตั้งใจที่จะย้อนกลับไปและลบ class คำหลักและคอมไพล์โดยไม่ต้องส่งต่อแคปซูลคอมพ์

105
00:09:56,160 --> 00:10:04,080
‫เมื่อฉันพูดว่าคอมไพล์ ฉันหมายความว่าคุณสามารถคอมไพล์จากโค้ด Visual Studio เพียงแค่คอมไพล์ C++ ปกติ

106
00:10:04,110 --> 00:10:11,670
‫คุณได้เรียนรู้วิธีดำเนินการดังกล่าวแล้ว หรือเพียงแค่บันทึกไฟล์และโค้ด Visual Studio แล้วเริ่มเขียนโค้ดแบบสด

107
00:10:11,670 --> 00:10:17,280
‫วิธีใดวิธีหนึ่งก็ใช้ได้ และเมื่อเราดำเนินการร่วมกันแล้ว ฉันจะแสดงให้คุณเห็นว่าเกิดอะไรขึ้นกับทั้งสองวิธี

108
00:10:17,280 --> 00:10:22,440
‫หากคุณใช้ live coding แน่นอนว่าคุณจะต้องดูผลลัพธ์ที่สร้างขึ้นในหน้าต่าง

109
00:10:22,440 --> 00:10:27,270
‫live coding แทนที่จะเป็นเอาต์พุตที่คุณจะเห็นในโค้ด Visual Studio

110
00:10:27,270 --> 00:10:34,260
‫ตอนนี้สปอยเลอร์ คุณจะได้รับข้อผิดพลาดในการคอมไพล์ ดูข้อความแสดงข้อผิดพลาดในการรวบรวม ดูว่ามันบอกคุณว่าอะไร

111
00:10:34,470 --> 00:10:38,070
‫นี่เป็นเพียงการทำความคุ้นเคยกับข้อผิดพลาดที่เราสร้างขึ้น

112
00:10:38,070 --> 00:10:43,500
‫หลังจากนี้ ย้อนกลับไปข้างหน้า ประกาศแคปซูลคอมพ์โดยใช้คีย์เวิร์ดคลาส

113
00:10:43,620 --> 00:10:48,450
‫เมื่อคุณทำเสร็จแล้ว ให้คอมไพล์อีกครั้ง คุณควรได้รับการคอมไพล์สำเร็จในครั้งนี้

114
00:10:48,780 --> 00:10:51,060
‫หยุดวิดีโอชั่วคราวแล้วลองทำดู

115
00:10:53,520 --> 00:10:56,350
‫เอาล่ะ มาทำลายโค้ดของเรากันที่นี่

116
00:10:56,370 --> 00:10:58,320
‫ฉันจะลบคำหลักของชั้นเรียน

117
00:10:58,700 --> 00:11:03,540
‫โอเค เราพยายามคอมไพล์แล้ว และนี่คือผลลัพธ์ในเทอร์มินัล

118
00:11:03,570 --> 00:11:10,830
‫สิ่งแรกที่เราเห็นคือข้อผิดพลาด และมันให้รหัสข้อผิดพลาดแก่เรา และมันบอกว่าแคปซูลคอมพ์ไม่ใช่สมาชิกของฐานจำนำ

119
00:11:10,860 --> 00:11:17,940
‫เรามีข้อความแจ้งว่า C ประกาศการจำนำพื้นฐาน และเราเห็นว่าเราได้รับข้อผิดพลาดอื่นๆ อันเป็นผลมาจากสิ่งนี้

120
00:11:17,940 --> 00:11:23,390
‫บ่อยครั้งที่นักเรียนจะสับสนเมื่อพยายามรวบรวมและดูเหมือนมีข้อผิดพลาดหลายอย่าง

121
00:11:23,400 --> 00:11:28,560
‫ดังนั้น นี่จึงแสดงให้เห็นว่าความผิดพลาดเพียงครั้งเดียวสามารถแพร่กระจายชุดของข้อผิดพลาดได้

122
00:11:28,560 --> 00:11:31,670
‫และนั่นไม่ได้หมายความว่าคุณต้องไปแก้ไขไฟล์จำนวนมาก

123
00:11:31,680 --> 00:11:34,410
‫ข้อผิดพลาดอาจมีต้นกำเนิดเดียวที่นี่

124
00:11:34,410 --> 00:11:36,420
‫เรารู้ว่าสาเหตุของข้อผิดพลาดคืออะไร

125
00:11:36,420 --> 00:11:37,820
‫เราจำเป็นต้องส่งต่อประกาศ

126
00:11:37,830 --> 00:11:45,150
‫ตอนนี้เรามาดูกันว่าจะเกิดอะไรขึ้นถ้าเราใช้ live coding แทนการคอมไพล์ปกติและโค้ด Visual Studio

127
00:11:45,150 --> 00:11:51,450
‫ดังนั้นฉันจะไปข้างหน้าและคลิกปุ่มเพื่อเริ่มต้นการเขียนโค้ดแบบสด และในทันทีที่เป็นสีแดง ฉันเห็นการบิลด์ล้มเหลว

128
00:11:51,450 --> 00:11:54,270
‫และเราเห็นสิ่งเดียวกันที่นี่

129
00:11:54,270 --> 00:11:55,050
‫ที่นี่.

130
00:11:55,050 --> 00:11:59,310
‫แคปซูลคอมพ์ไม่ใช่สมาชิกของฐานจำนำ

131
00:11:59,340 --> 00:12:01,860
‫ดูประกาศฐานจำนำ

132
00:12:01,860 --> 00:12:03,750
‫ดังนั้นเราจึงเห็นสิ่งเดียวกันที่นี่

133
00:12:03,750 --> 00:12:08,490
‫ดังนั้นไม่ว่ากรณีใดเราจะเห็นข้อผิดพลาดเช่นนี้เมื่อเราลืมส่งต่อการประกาศ

134
00:12:08,490 --> 00:12:17,340
‫ตอนนี้เรารู้แล้วว่าหน้าตาเป็นอย่างไร และตอนนี้เราก็ได้รับข้อมูลมากขึ้นและกลัวข้อความแสดงข้อผิดพลาดในการคอมไพล์ลึกลับเหล่านี้น้อยลง

135
00:12:17,460 --> 00:12:24,990
‫สิ่งที่เราจะทำคือแก้ไขข้อผิดพลาดนี้โดย Forward ประกาศส่วนประกอบแคปซูลของคุณ จากนั้นเราจะพยายามคอมไพล์อีกครั้ง

136
00:12:24,990 --> 00:12:27,780
‫และตอนนี้เราได้รวบรวมโดยไม่มีข้อผิดพลาดใดๆ

137
00:12:27,870 --> 00:12:32,070
‫ตอนนี้เรามาดูกันว่าเมื่อเราลืม Forward ประกาศตัวแปรจะเป็นอย่างไร

138
00:12:32,100 --> 00:12:35,250
‫จำไว้ว่าเมื่อคุณได้รับข้อผิดพลาดของคอมไพเลอร์ในอนาคต

139
00:12:35,760 --> 00:12:41,490
‫โดยสรุป เราได้หารือเกี่ยวกับการประกาศไปข้างหน้าเมื่อสร้างตัวชี้ใหม่ และเราได้เรียนรู้ว่าคุณควรรวมเฉพาะสิ่งที่คุณใช้ในไฟล์

140
00:12:41,490 --> 00:12:49,020
‫CP และเราควรรวมไว้ในไฟล์ H ให้น้อยที่สุด

141
00:12:49,050 --> 00:13:00,090
‫เรารู้ว่าเราไม่ต้องการไฟล์ส่วนหัวเพื่อประกาศตัวชี้ใหม่ตราบใดที่เราประกาศไปข้างหน้าและเราจำเป็นต้องมีไฟล์ส่วนหัวหากเราจะสร้างวัตถุประเภทใดประเภทหนึ่ง

142
00:13:00,090 --> 00:13:09,780
‫และเราต้องการไฟล์ส่วนหัวเพื่อเข้าถึงสมาชิกเช่นฟังก์ชันและตัวแปร และเราเห็นว่าเราต้องการไฟล์ส่วนหัวสำหรับการสืบทอดสำหรับการสืบทอดจากคลาส

143
00:13:09,780 --> 00:13:11,460
‫เราต้องการไฟล์ส่วนหัวที่นั่น

144
00:13:11,580 --> 00:13:17,160
‫ตอนนี้เรารู้วิธีส่งต่อการประกาศประเภท และเรามีคอมพ์แคปซูลพอยน์เตอร์แล้ว เราก็พร้อมที่จะสร้างออบเจ็กต์ที่เป็นส่วนประกอบของแคปซูลจริงๆ

145
00:13:17,160 --> 00:13:21,840
‫แล้วเราจะทำในวิดีโอหน้า

146
00:13:22,200 --> 00:13:23,040
‫เจอกันเร็วๆนี้ครับ

