﻿1
00:00:04,410 --> 00:00:05,370
‫สวัสดีและยินดีต้อนรับ.

2
00:00:05,370 --> 00:00:10,350
‫ในการบรรยายนี้ เราจะเรียนรู้เกี่ยวกับปรากฏการณ์ประหลาดที่เรียกว่า พารามิเตอร์เอาท์

3
00:00:10,350 --> 00:00:18,240
‫นี่คือพารามิเตอร์ที่แทนที่จะส่งค่าใน C++ เรามักจะส่งค่าออกจากฟังก์ชัน

4
00:00:18,330 --> 00:00:25,620
‫และเราจะได้เห็นสิ่งที่เรียกว่า การอ้างอิงคงที่ และแนวคิดทั้งสองนี้เชื่อมโยงกันอย่างไร

5
00:00:25,650 --> 00:00:27,900
‫มาดำดิ่งลงไปและคิดออก

6
00:00:28,850 --> 00:00:29,180
‫ตอนนี้.

7
00:00:29,180 --> 00:00:36,980
‫สถานที่จริงที่อ้างอิงถึงความเปล่งประกายอยู่ในพารามิเตอร์ของฟังก์ชัน เพราะทุกครั้งที่เราสร้างโฟลตเดลต้าเวลาแบบนี้ในองค์ประกอบด้านเทคนิคของเรา

8
00:00:36,980 --> 00:00:49,580
‫สิ่งที่เราทำคือเรากำลังคัดลอกโฟลตดั้งเดิมนั้นและส่งต่อไปยัง ฟังก์ชั่น.

9
00:00:49,580 --> 00:00:56,000
‫ดังนั้นแทนที่จะทำอย่างนั้น สิ่งที่เราอาจต้องการทำคืออ้างอิงถึงมันและส่งต่อสิ่งนั้นแทน

10
00:00:56,090 --> 00:01:03,020
‫ลองนึกภาพว่าเรากำลังสร้างฟังก์ชันในแรงโน้มถ่วงที่เรียกว่าความเสียหายจากการพิมพ์

11
00:01:03,020 --> 00:01:09,360
‫และในฐานะอาร์กิวเมนต์ของฟังก์ชันนี้ เราต้องการส่งความเสียหายแบบลอยตัว

12
00:01:09,380 --> 00:01:14,780
‫ทีนี้ อย่างที่ฉันบอกไป กำลังจะทำสำเนาของทุกสิ่งที่เราส่งผ่านเข้ามา และคัดลอกไปยังตัวแปรนั้น

13
00:01:14,780 --> 00:01:18,980
‫สร้างตัวแปรพารามิเตอร์นี้ภายในฟังก์ชันความเสียหายของการพิมพ์

14
00:01:19,930 --> 00:01:24,610
‫และเราจำเป็นต้องมีค่าส่งคืนเป็นโมฆะที่นี่เช่นกันเพื่อให้สมบูรณ์ในเครื่องหมายอัฒภาคตอนท้าย

15
00:01:24,640 --> 00:01:28,630
‫ไปที่ C ++ และสนทนาต่อ

16
00:01:28,630 --> 00:01:31,030
‫มาสร้างความเสียหายในการพิมพ์กันเถอะ

17
00:01:31,300 --> 00:01:39,490
‫มาวางคุณคว้าชั้นเรียนไว้ก่อนแล้วใส่เครื่องหมายวงเล็บแทนเครื่องหมายอัฒภาค

18
00:01:39,670 --> 00:01:48,340
‫ดังนั้นเราจึงมีสำเนาของตัวแปรพารามิเตอร์ความเสียหาย และปลอดภัยเพราะถ้าฉันต้องทำความเสียหายเท่ากับห้า

19
00:01:48,340 --> 00:01:53,980
‫ฉันจะเปลี่ยนตัวแปรนี้ที่นี่ภายในความเสียหายของงานพิมพ์เท่านั้น

20
00:01:53,980 --> 00:01:55,600
‫ฉันมีสำเนาของมันเอง

21
00:01:55,600 --> 00:01:58,160
‫ฉันไม่สามารถทำให้มันยุ่งเหยิงได้โดยบังเอิญ

22
00:01:58,180 --> 00:02:01,460
‫แล้วถ้าฉันไม่ต้องการทำสำเนาล่ะ

23
00:02:01,480 --> 00:02:04,530
‫ทางเลือกของฉันคือการอ้างอิง

24
00:02:04,540 --> 00:02:10,840
‫สิ่งที่ฉันทำได้ที่นี่คือฉันสามารถใส่ข้อมูลอ้างอิงแบบลอยตัวลงในความเสียหายของงานพิมพ์ได้

25
00:02:10,840 --> 00:02:14,500
‫และฉันต้องอัปเดตสิ่งนั้นในไฟล์ C++ ด้วยเช่นกัน

26
00:02:14,650 --> 00:02:22,690
‫แล้วฉันอาจมีข้อความบันทึกนี้ที่เรากำลังใช้ข้อมูลอ้างอิง ไปลบมันทิ้งและใส่มันลงในความเสียหายทางการพิมพ์

27
00:02:22,690 --> 00:02:25,360
‫ตอนนี้เรารับความเสียหายและกำลังพิมพ์

28
00:02:25,360 --> 00:02:33,490
‫Outlets อัปเดตคำสั่งบันทึกเพื่อบอกว่าความเสียหายคือสิ่งนี้ ดังนั้นความเสียหายนี้จึงสร้างความเสียหาย และในองค์ประกอบเห็บของเรา

29
00:02:33,490 --> 00:02:41,470
‫สิ่งที่เราสามารถทำได้คือเราสามารถพิมพ์ความเสียหายและส่งผ่านตัวแปรความเสียหายของเราและใส่เครื่องหมายอัฒภาคต่อท้าย

30
00:02:41,470 --> 00:02:49,360
‫และเราสามารถกำจัดการอ้างอิงความเสียหายของเราได้ สำหรับตอนนี้ เพราะสิ่งที่เราทำอยู่ตอนนี้คือดาเมจลอย

31
00:02:49,480 --> 00:02:51,040
‫มันถูกสร้างขึ้นใน TTIC

32
00:02:51,070 --> 00:03:00,100
‫หน่วยความจำสำหรับสิ่งนี้ถูกสร้างขึ้นที่นี่และทำเครื่องหมายจากนั้นเราไปและมอบให้กับฟังก์ชันความเสียหายของการพิมพ์

33
00:03:00,100 --> 00:03:06,670
‫แต่เนื่องจากพารามิเตอร์เป็นข้อมูลอ้างอิง เราไม่ได้คัดลอกความเสียหายนี้จริงๆ

34
00:03:06,670 --> 00:03:13,330
‫เราใช้ที่อยู่และจัดเก็บข้อมูลนั้นไว้ในข้อมูลอ้างอิงแทน เพื่อที่เมื่อเราใช้ข้อมูลอ้างอิงนี้ในบรรทัด

35
00:03:13,330 --> 00:03:18,160
‫เรากำลังเข้าถึงหน่วยความจำเดิม

36
00:03:18,160 --> 00:03:21,970
‫ดังนั้นจึงไม่จำเป็นต้องทำสำเนาเพื่อพิมพ์ความเสียหาย

37
00:03:21,970 --> 00:03:25,270
‫ทีนี้ลองตรวจสอบว่านี่เป็นสิ่งที่เราคาดหวังไว้จริง ๆ

38
00:03:25,270 --> 00:03:35,500
‫ถ้าฉันเปลี่ยนค่าความเสียหายเป็นห้า ตัวอย่างเช่น จากนั้นคอมไพล์ใหม่และกดปุ่มเล่น ให้ไปดูบันทึกผลลัพธ์นั้น

39
00:03:35,500 --> 00:03:38,590
‫อันที่จริงได้รับการพิมพ์ว่าความเสียหายเป็นห้า

40
00:03:38,590 --> 00:03:42,910
‫แต่เนื่องจากเรามีข้อมูลอ้างอิง เราจึงรู้ว่าเราสามารถอัปเดตค่านั้นได้

41
00:03:42,910 --> 00:03:49,990
‫สิ่งที่ฉันทำได้คือฉันสามารถพูดได้ภายในฟังก์ชันนี้ว่าฉันทำได้ เฮ้ ความเสียหายควรเท่ากับสองอย่างนั้น

42
00:03:50,230 --> 00:03:55,510
‫และถ้าฉันไม่ระวัง ถ้าฉันคิดว่าฉันมีสำเนาของตัวเอง ฉันอาจจะคิดว่ามันโอเค

43
00:03:55,510 --> 00:04:01,510
‫แต่ที่จริงแล้วในองค์ประกอบติ๊ก สิ่งที่เราทำคือเราได้เปลี่ยนตัวแปรเดิม

44
00:04:01,520 --> 00:04:09,640
‫ดังนั้น ถ้าฉันใส่ล็อกใหม่ที่นี่เพื่อตรวจสอบตัวแปรความเสียหายดั้งเดิมนั้น และเราใส่เปอร์เซ็นต์ F และส่งความเสียหายที่นี่

45
00:04:09,640 --> 00:04:17,230
‫เรามาเขียนโค้ดแบบสด คอมไพล์มัน แล้วเราจะตีเพลย์และดูบันทึกผลลัพธ์ของเรา .

46
00:04:17,230 --> 00:04:22,990
‫และคุณจะเห็นได้ว่าตอนนี้ทั้งความเสียหายและความเสียหายเดิมได้รับการแก้ไขแล้ว

47
00:04:22,990 --> 00:04:27,490
‫พวกเขาทั้งสองถูกเปลี่ยนเป็นหมายเลขสองซึ่งไม่ดี

48
00:04:27,490 --> 00:04:35,770
‫คุณรู้ไหมว่าคุณสามารถทำความเสียหายได้มากโดยไม่ได้ตั้งใจ ถ้าคุณจะแก้ตัวโดยเปลี่ยนตัวแปรที่คุณไม่ได้คาดหวังว่าจะเปลี่ยนแปลง

49
00:04:35,920 --> 00:04:41,380
‫และนี่คือการใช้คำหลักคงที่ที่เราเคยเห็นในอดีต

50
00:04:41,530 --> 00:04:52,570
‫ถ้าฉันติด const หน้าการอ้างอิง float ของฉัน สิ่งที่ฉันพูดที่นี่คือควรเป็นข้อมูลอ้างอิงที่คุณไม่สามารถเปลี่ยนแปลงได้

51
00:04:52,570 --> 00:04:56,440
‫คุณไม่สามารถเรียกใช้ฟังก์ชันที่ไม่ติดต่อได้ คุณไม่สามารถตั้งค่าได้

52
00:04:56,440 --> 00:05:00,430
‫คุณไม่สามารถเปลี่ยนแปลงเนื้อหาของตัวแปรนี้ได้

53
00:05:00,430 --> 00:05:04,420
‫ใช้ได้เท่านั้น อ่านได้อย่างเดียว ดูได้เฉพาะสิ่งที่อยู่ในนั้น

54
00:05:04,420 --> 00:05:10,570
‫ดังนั้นถ้าเรากลับไปจับ CPP ของเรา เราต้องแน่ใจว่าเราใส่ Const ที่นี่ในพารามิเตอร์ด้วย และเราสามารถดำเนินการต่อและคอมไพล์ได้

55
00:05:10,570 --> 00:05:22,090
‫และคุณจะเห็นว่าเราได้รับความล้มเหลวในการสร้างและข้อผิดพลาดบอกว่าความเสียหายไม่สามารถ กำหนดให้เนื่องจากเป็นตัวแปรคงที่

56
00:05:22,090 --> 00:05:25,240
‫เพื่อให้การป้องกันที่เราต้องการ

57
00:05:25,240 --> 00:05:32,950
‫โดยทั่วไปแล้ว หากเราพยายามส่งผ่านตัวแปรเข้ามา ด้วยวิธีที่มีประสิทธิภาพโดยที่เราไม่ต้องการคัดลอก

58
00:05:32,950 --> 00:05:38,950
‫เราจะใช้คำสำคัญติดต่อเสมอ และใช้ข้อมูลอ้างอิงเสมอ เพราะสิ่งนี้จะป้องกันเราจาก

59
00:05:38,950 --> 00:05:43,900
‫บังเอิญเปลี่ยนเนื้อหานั้น

60
00:05:44,200 --> 00:05:53,380
‫อย่างไรก็ตาม บางครั้งคุณต้องการใช้มันเพื่อเปลี่ยนค่านั้นและสิ่งที่เราอาจมีเป็นตัวอย่าง เราอาจมีค่าส่งคืนบูลีนและเราอาจต้องการบอกว่ามีความเสียหาย

61
00:05:53,380 --> 00:06:06,610
‫แต่เราอาจเช่นกัน ตามที่เราทำใน พิมพ์เขียวในอดีตต้องการให้มีค่าส่งคืนที่สอง

62
00:06:06,610 --> 00:06:10,810
‫เราอาจกล่าวได้ว่า เราได้ความเสียหายมาอย่างไร และความเสียหายนั้นคืออะไร?

63
00:06:10,810 --> 00:06:19,240
‫ในกรณีนี้ มันสมเหตุสมผลแล้วที่จะใช้การอ้างอิงแบบ non const แบบง่ายๆ ซึ่งเป็นการอ้างอิงแบบ float

64
00:06:19,620 --> 00:06:29,330
‫ความเสียหาย และโดยปกติ เราจะเรียกสิ่งนี้ว่าความเสียหายเพียงเพื่อให้เห็นได้ชัดเจนว่านี่คือสิ่งที่เรียกว่าค่าพารามิเตอร์

65
00:06:29,340 --> 00:06:31,150
‫ไม่ใช่พารามิเตอร์สำหรับการส่งผ่านสิ่งต่างๆ

66
00:06:31,170 --> 00:06:33,520
‫เป็นพารามิเตอร์สำหรับการส่งผ่านสิ่งต่าง ๆ

67
00:06:33,540 --> 00:06:38,400
‫ตอนนี้อาจเป็นเรื่องแปลก ๆ เล็กน้อยของ C ++ และอาจมองเห็นได้ยาก

68
00:06:38,400 --> 00:06:44,460
‫แต่โดยทั่วไปแล้ว หากคุณเห็นพารามิเตอร์ใด ๆ ที่เป็นข้อมูลอ้างอิงแต่ไม่ได้ทำเครื่องหมายเป็น

69
00:06:44,460 --> 00:06:50,890
‫const คุณสามารถสันนิษฐานได้ว่ามีใครบางคนตั้งใจจะใช้สิ่งนั้นเป็นพารามิเตอร์ out

70
00:06:50,910 --> 00:06:52,560
‫นั่นคือสิ่งที่เราได้รับที่นี่

71
00:06:52,560 --> 00:06:53,820
‫เราได้รับความเสียหาย

72
00:06:53,820 --> 00:07:01,440
‫และถ้าเราจะดำเนินการนี้ใน CPP เราก็สามารถใส่คลาส you grabber ไว้ข้างหน้าที่นี่

73
00:07:01,440 --> 00:07:05,950
‫และเราสามารถใส่วงเล็บปีกกาของเราที่นี่

74
00:07:05,970 --> 00:07:12,390
‫เราจะแสดงความคิดเห็นเกี่ยวกับความเสียหายในการพิมพ์ซึ่งไม่พอใจเพราะเรากำลังพยายามตั้งค่าการอ้างอิงต้นทุน

75
00:07:12,720 --> 00:07:19,710
‫และโดยพื้นฐานแล้ว สิ่งที่เราสามารถทำได้ในที่นี้คือ เราสามารถทำโค้ดได้ เราสามารถดูว่าเราได้รับความเสียหายหรือไม่

76
00:07:19,710 --> 00:07:22,230
‫จากนั้นเราจะพิมพ์ออกมา ใช่ โอเค

77
00:07:22,230 --> 00:07:25,470
‫ความเสียหายออกเท่ากับห้า

78
00:07:25,470 --> 00:07:29,760
‫นั่นคือความเสียหายที่เกิดขึ้นและเรากำลังจะกลับ

79
00:07:29,760 --> 00:07:36,570
‫จริงอยู่ เนื่องจากเราได้รับความเสียหายบางส่วนที่ได้ทำไปแล้ว และตอนนี้เราสามารถนำไปใช้ในที่ใดที่หนึ่ง

80
00:07:36,570 --> 00:07:40,110
‫เช่น ส่วนประกอบเห็บเพื่อรับความเสียหาย

81
00:07:40,410 --> 00:07:46,080
‫ดังนั้นที่นี่แทนที่จะตั้งค่าความเสียหายห้า เราอาจได้รับความเสียหายและพิมพ์หากมีความเสียหาย

82
00:07:46,080 --> 00:07:56,700
‫ดังนั้นเราสามารถพูดอะไรบางอย่างตามบรรทัดเหล่านี้ได้หากมีความเสียหาย จากนั้นเราส่งตัวแปรที่เราต้องการให้สร้างความเสียหาย

83
00:07:56,700 --> 00:08:05,040
‫ตัวอย่างเช่น ความเสียหาย และจากนั้นเราสามารถมีเนื้อความของคำชี้แจงของเรา และเราสามารถเรียกความเสียหายจากการพิมพ์ได้เท่านั้น

84
00:08:05,040 --> 00:08:11,990
‫ตัวอย่างเช่น หากมีความเสียหายใด ๆ ที่จะแสดง และเราสามารถลบบันทึกนี้ทั้งหมดได้

85
00:08:12,000 --> 00:08:21,420
‫ดังนั้นนี่คือวิธีที่เราใช้การอ้างอิงที่ไม่ใช่ const เป็นพารามิเตอร์ out ซึ่งเป็นวิธีการรับค่าส่งคืนหลายค่าจากฟังก์ชัน

86
00:08:21,420 --> 00:08:29,820
‫และโดยปกติเมื่อเราทำเช่นนี้ เมื่อเราเรียกใช้ฟังก์ชันนี้ เราจะสร้างตัวแปร แต่เราจะไม่ให้ค่าเริ่มต้นแก่มัน

87
00:08:29,820 --> 00:08:37,050
‫ดังนั้นในบรรทัดที่ 39 โดยพื้นฐานแล้ว ฉันได้กำหนดความเสียหายแบบลอยตัว ฉันจะส่งมันในบรรทัดถัดไปทันที

88
00:08:37,050 --> 00:08:41,820
‫และนี่คือสัญญาณบอกอีกอย่างหนึ่งว่าคุณกำลังใช้พารามิเตอร์ out

89
00:08:42,150 --> 00:08:51,570
‫ฉันไม่ได้ให้ค่าใด ๆ ก่อนที่ฉันจะส่งต่อไปยังฟังก์ชันหมายความว่าฉันคาดหวังว่าฟังก์ชันนั้นจะใส่ค่านั้นให้ฉัน

90
00:08:51,570 --> 00:08:55,500
‫ดังนั้นสิ่งนี้จึงมองเห็นได้ยากในตอนแรกและอาจทำให้สับสนเล็กน้อย

91
00:08:55,500 --> 00:08:58,260
‫แต่นี่เป็นกฎสองข้อที่ฉันอยากให้คุณจำไว้

92
00:08:58,260 --> 00:09:04,380
‫หากคุณเห็นตัวแปรประกาศและไม่ได้รับค่าใด ๆ และส่งผ่านไปยังฟังก์ชันทันที ให้ถามตัวเองว่านั่นคือพารามิเตอร์

93
00:09:04,380 --> 00:09:05,910
‫out หรือไม่

94
00:09:05,910 --> 00:09:15,600
‫และกฎอีกข้อคือ ถ้าคุณเห็นการอ้างอิงเป็นพารามิเตอร์ แต่ไม่ใช่ค่าคงที่ นั่นอาจเป็นคำใบ้ว่านี่เป็นพารามิเตอร์ขาออก

95
00:09:15,600 --> 00:09:24,060
‫และแน่นอนว่าถ้าตัวแปรหรือพารามิเตอร์ถูกตั้งชื่อว่าอะไร นั่นเป็นการแจกฟรีที่สิ่งนี้ควรจะเป็นพารามิเตอร์ขาออก

96
00:09:24,300 --> 00:09:24,960
‫สิ่งที่ดี

97
00:09:24,960 --> 00:09:28,890
‫ฉันคิดว่านั่นทำให้เราทำได้ดีมาก สำหรับการกวาดล้าง

98
00:09:28,890 --> 00:09:30,990
‫แล้วพบกันใหม่ในบทเรียนหน้าครับ

