﻿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:17,460
‫هذه معلمة بدلاً من تمرير القيمة في C ++ ، فإننا نميل إلى تمرير القيمة من

4
00:00:17,460 --> 00:00:18,240
‫دالة.

5
00:00:18,330 --> 00:00:23,430
‫وسنرى أيضًا شيئًا يسمى مرجعًا ثابتًا وكيف أن هذين المفهومين متشابكان

6
00:00:23,430 --> 00:00:25,620
‫نوعًا ما مع بعضهما البعض.

7
00:00:25,650 --> 00:00:27,900
‫دعونا نتعمق ونكتشف ذلك.

8
00:00:28,850 --> 00:00:29,180
‫حاليا.

9
00:00:29,180 --> 00:00:36,980
‫المكان الحقيقي الذي يشير إلى التألق هو في المعلمات إلى الوظائف ، لأنه في كل مرة ننشئ

10
00:00:36,980 --> 00:00:45,200
‫فيها وقت دلتا عائم مثل هذا في مكوننا التكنولوجي ، ما نفعله هو أننا نأخذ نسخة من ذلك التعويم

11
00:00:45,200 --> 00:00:49,580
‫الأصلي ونقوم بتمريره إلى الوظيفة.

12
00:00:49,580 --> 00:00:56,000
‫لذا بدلاً من القيام بذلك ، ما قد نرغب في القيام به هو أخذ إشارة إليه ونقله بدلاً من ذلك.

13
00:00:56,090 --> 00:01:03,020
‫فلنتخيل أننا سننشئ وظيفة في الجاذبية تسمى تلف الطباعة.

14
00:01:03,020 --> 00:01:09,360
‫وكحجة لهذه الدالة ، نريد تمرير ضرر عائم.

15
00:01:09,380 --> 00:01:14,780
‫الآن ، هذا ، كما قلت ، سوف يقوم بعمل نسخة من كل ما نمرره ونسخه إلى هذا المتغير.

16
00:01:14,780 --> 00:01:18,980
‫قم بإنشاء متغير المعلمة هذا داخل وظيفة تلف الطباعة.

17
00:01:19,930 --> 00:01:24,610
‫ونحتاج أيضًا إلى الحصول على القيمة المرجعة للفراغ هنا أيضًا لإكماله في فاصلة منقوطة في النهاية.

18
00:01:24,640 --> 00:01:28,630
‫دعنا ننتقل إلى C ++ ونواصل هذه المحادثة.

19
00:01:28,630 --> 00:01:31,030
‫لنقم بإنشاء تلف الطباعة هنا.

20
00:01:31,300 --> 00:01:39,490
‫دعنا نضع لك فئة أمامها ودعنا نضع بعض الأقواس بدلاً من الفاصلة المنقوطة.

21
00:01:39,670 --> 00:01:48,340
‫إذاً لدينا نسخة من متغير معامل الضرر وهو آمن لأنني إذا قمت بإحداث ضرر يساوي خمسة ، فأنا

22
00:01:48,340 --> 00:01:53,980
‫فقط أقوم بتغيير هذا المتغير هنا ضمن تلف الطباعة.

23
00:01:53,980 --> 00:01:55,600
‫لدي نسخة منه بنفسي.

24
00:01:55,600 --> 00:01:58,160
‫لا أستطيع أن أفسد الأمر بالصدفة.

25
00:01:58,180 --> 00:02:01,460
‫الآن ، ماذا لو لم أرغب في عمل نسخة؟

26
00:02:01,480 --> 00:02:04,530
‫سيكون بديلي هو أخذ مرجع.

27
00:02:04,540 --> 00:02:10,840
‫لذا ما يمكنني فعله هنا هو أنه يمكنني وضع مرجع عائم في تلف الطباعة ، وأحتاج

28
00:02:10,840 --> 00:02:14,500
‫إلى تحديث ذلك في ملف C ++ أيضًا.

29
00:02:14,650 --> 00:02:20,440
‫وبعد ذلك قد يكون لدي رسالة السجل التي نستخدمها للمرجع ، دعنا نذهب ونأخذ هذا

30
00:02:20,440 --> 00:02:22,690
‫ونضع ذلك في تلف الطباعة.

31
00:02:22,690 --> 00:02:25,360
‫والآن نأخذ الضرر الذي تسببنا به ونطبعه.

32
00:02:25,360 --> 00:02:33,490
‫تقوم المنافذ بتحديث بيان السجل ليقول إن الضرر هو هذا يؤدي إلى إتلاف هذا الضرر وفي مكون التجزئة الخاص بنا ، ما

33
00:02:33,490 --> 00:02:41,470
‫يمكننا القيام به هو أنه يمكننا القيام بطباعة الضرر وتمرير متغير الضرر الخاص بنا ووضع فاصلة منقوطة في النهاية

34
00:02:41,470 --> 00:02:49,360
‫ويمكننا التخلص من مرجع الضرر الخاص بنا في الوقت الحالي ، لأن ما حصلنا عليه الآن هو تعويم الضرر.

35
00:02:49,480 --> 00:02:51,040
‫تم إنشاؤه في TTIC.

36
00:02:51,070 --> 00:03:00,100
‫تم إنشاء ذاكرة لهذا هنا ووضع علامة ثم نذهب ونعطيها لوظيفة تلف الطباعة هذه.

37
00:03:00,100 --> 00:03:06,670
‫ولكن نظرًا لأن المعلمة هي مرجع ، فإننا في الواقع لا ننسخ هذا الضرر.

38
00:03:06,670 --> 00:03:13,330
‫نحن نأخذ عنوانه ونخزنه في المرجع بدلاً من ذلك بحيث عندما نستخدم هذا المرجع أسفل

39
00:03:13,330 --> 00:03:18,160
‫السطر ، فإننا في الواقع نصل إلى الجزء الأصلي من الذاكرة.

40
00:03:18,160 --> 00:03:21,970
‫لذلك لم يكن من الضروري إجراء نسخة لهذا لطباعة التلف.

41
00:03:21,970 --> 00:03:25,270
‫الآن دعنا نتحقق فقط من أن هذا يقوم بالفعل بما نتوقعه.

42
00:03:25,270 --> 00:03:34,060
‫إذا قمت بتغيير قيمة الضرر إلى خمسة ، على سبيل المثال ، ثم أعدت الترجمة والضغط على تشغيل ، فانتقل وألقي نظرة على

43
00:03:34,060 --> 00:03:35,500
‫سجل الإخراج هذا.

44
00:03:35,500 --> 00:03:38,590
‫وبالفعل تحصل الطباعة على أن الضرر خمسة.

45
00:03:38,590 --> 00:03:42,910
‫ولكن نظرًا لأن لدينا مرجعًا ، فإننا نعلم أنه يمكننا تحديث هذه القيمة.

46
00:03:42,910 --> 00:03:49,000
‫لذا ما يمكنني فعله هو أنني أستطيع أن أقول ضمن هذه الوظيفة يمكنني القيام به ، مهلاً ، يجب أن يكون الضرر مساويًا

47
00:03:49,000 --> 00:03:49,990
‫لاثنين مثل ذلك.

48
00:03:50,230 --> 00:03:55,510
‫وإذا لم أكن حريصًا ، إذا اعتقدت أن لدي نسخة خاصة بي ، فقد أعتقد أن هذا جيد.

49
00:03:55,510 --> 00:04:01,510
‫لكن في الواقع في مكون التجزئة ، ما فعلناه هو أننا قمنا بتغيير المتغير الأصلي.

50
00:04:01,520 --> 00:04:09,640
‫لذا ، إذا وضعت سجلاً جديدًا هنا لفحص متغير الضرر الأصلي هذا ووضعنا النسبة المئوية F وقمنا بتجاوز

51
00:04:09,640 --> 00:04:16,420
‫الضرر هنا ، فلنعيش البرمجة ، ونجمع ذلك وسنبدأ اللعب ونلقي نظرة على سجل الإخراج لدينا

52
00:04:16,420 --> 00:04:17,230
‫.

53
00:04:17,230 --> 00:04:22,990
‫ويمكنك أن ترى أنه تم الآن تعديل الضرر والضرر الأصلي.

54
00:04:22,990 --> 00:04:27,490
‫كلاهما تم تغييرهما إلى الرقم الثاني ، وهذا ليس رائعًا.

55
00:04:27,490 --> 00:04:33,130
‫كما تعلم ، يمكن أن تحدث الكثير من الضرر عن طريق الخطأ ، إذا كنت ستعذر التورية ، عن طريق تغيير

56
00:04:33,130 --> 00:04:35,770
‫المتغيرات التي لم تكن تتوقع تغييرها.

57
00:04:35,920 --> 00:04:41,380
‫وهنا يأتي استخدام آخر لتلك الكلمة الرئيسية الثابتة التي رأيناها في الماضي.

58
00:04:41,530 --> 00:04:49,690
‫إذا قمت بوضع ثابت أمام مرجع عائم ، فإن ما أقوله هنا هو أنه يجب أن يكون هذا

59
00:04:49,690 --> 00:04:52,570
‫مرجعًا لا يمكنك تغييره.

60
00:04:52,570 --> 00:04:56,440
‫لا يمكنك استدعاء أي وظائف لا تتعلق بالاتصال به ، ولا يمكنك تعيينها.

61
00:04:56,440 --> 00:05:00,430
‫لا يمكنك بأي شكل من الأشكال تغيير محتويات هذا المتغير.

62
00:05:00,430 --> 00:05:04,420
‫يمكنك فقط استخدامه ، يمكنك قراءته فقط ، يمكنك فقط رؤية ما بداخله.

63
00:05:04,420 --> 00:05:10,570
‫لذلك إذا عدنا إلى الاستيلاء على CPP ، فنحن بحاجة إلى التأكد من أننا وضعنا Const

64
00:05:10,570 --> 00:05:17,230
‫هنا في المعلمات أيضًا ويمكننا المضي قدمًا والتجميع وترى أننا حصلنا على فشل في البناء

65
00:05:17,230 --> 00:05:22,090
‫والخطأ يقول أن الضرر لا يمكن أن يكون مخصص ل لأنه متغير ثابت.

66
00:05:22,090 --> 00:05:25,240
‫وهذا يمنحنا الحماية التي نحتاجها.

67
00:05:25,240 --> 00:05:32,950
‫لذلك بشكل عام ، إذا كنا نحاول تمرير متغير بطريقة فعالة حيث لا نريد أن نأخذ نسخة ، فسنستخدم

68
00:05:32,950 --> 00:05:38,950
‫دائمًا الكلمة الأساسية للاتصال بالإضافة إلى استخدام مرجع لأن هذا

69
00:05:38,950 --> 00:05:43,900
‫يمنعنا من تغيير تلك المحتويات عن طريق الخطأ.

70
00:05:44,200 --> 00:05:53,380
‫ومع ذلك ، في بعض الأحيان تريد استخدامه لتغيير هذه القيمة وما قد نحصل عليه كمثال ، قد يكون لدينا

71
00:05:53,380 --> 00:06:03,190
‫قيمة عائد منطقية وقد نرغب في أن نقول أن هناك ضررًا ، ولكن قد نقوم أيضًا ، كما فعلنا في مخطط في الماضي ، تريد

72
00:06:03,190 --> 00:06:06,610
‫الحصول على قيمة إرجاع ثانية.

73
00:06:06,610 --> 00:06:10,810
‫لذلك قد نقول ، كيف أصابنا أي ضرر وما هو هذا الضرر؟

74
00:06:10,810 --> 00:06:19,240
‫حسنًا ، في هذه الحالة ، من المنطقي استخدام مرجع بسيط غير ثابت ، مرجع عائم إليه.

75
00:06:19,620 --> 00:06:26,640
‫الضرر ، وعادة ما نطلق عليه هذا الضرر فقط لجعله مرئيًا حقًا أن هذا هو ما

76
00:06:26,640 --> 00:06:29,330
‫يُعرف باسم معلمة الخروج.

77
00:06:29,340 --> 00:06:31,150
‫إنه ليس معيارًا لتمرير الأشياء.

78
00:06:31,170 --> 00:06:33,520
‫إنها معلمة لتمرير الأشياء.

79
00:06:33,540 --> 00:06:38,400
‫الآن ، يمكن أن يكون الأمر غريبًا بعض الشيء في C ++ وقد يكون من الصعب اكتشافه.

80
00:06:38,400 --> 00:06:44,460
‫لكن بشكل عام ، إذا رأيت أي معلمات تمثل مرجعًا ولكن لم يتم تمييزها على أنها ثابتة

81
00:06:44,460 --> 00:06:50,890
‫، فيمكنك أن تفترض إلى حد كبير أن شخصًا ما كان ينوي استخدام ذلك كمعامل خارجي.

82
00:06:50,910 --> 00:06:52,560
‫هذا ما لدينا هنا.

83
00:06:52,560 --> 00:06:53,820
‫لقد حصلنا عليه به ضرر.

84
00:06:53,820 --> 00:07:01,440
‫وإذا أردنا أن نذهب وننفذ هذا في CPP ، فيمكننا وضع فئة المختطفين في المقدمة

85
00:07:01,440 --> 00:07:05,950
‫هنا ويمكننا وضع أقواس الأقواس هنا.

86
00:07:05,970 --> 00:07:10,680
‫سنقوم بالتعليق على السطر الموجود في تلف الطباعة حيث لا يكون الأمر سعيدًا لأننا

87
00:07:10,680 --> 00:07:12,390
‫نحاول تعيين مرجع للتكلفة.

88
00:07:12,720 --> 00:07:19,710
‫وما يمكننا القيام به هنا هو أنه يمكننا عمل بعض التعليمات البرمجية ، ويمكننا معرفة ما إذا كان لدينا

89
00:07:19,710 --> 00:07:22,230
‫بعض الضرر ثم نطبع ، نعم ، حسنًا.

90
00:07:22,230 --> 00:07:25,470
‫الضرر الناتج يساوي خمسة.

91
00:07:25,470 --> 00:07:29,760
‫هذا هو الضرر الذي حدث وسنعود.

92
00:07:29,760 --> 00:07:36,570
‫صحيح ، لأننا حصلنا على بعض الضرر الذي حدث وهذا يمكننا الآن استخدامه في مكان

93
00:07:36,570 --> 00:07:40,110
‫ما مثل مكونات القراد لامتصاص الضرر.

94
00:07:40,410 --> 00:07:46,080
‫لذا بدلاً من ضبط الضرر خمسة ، قد نحصل على الضرر ونطبعه إذا كان هناك

95
00:07:46,080 --> 00:07:54,090
‫بعض الضرر ، لذا يمكننا أن نقول شيئًا ما على غرار هذه السطور إذا كان هناك ضرر ثم نمرر في المتغير

96
00:07:54,090 --> 00:07:56,700
‫الذي نريد أن يتم ملؤه بالضرر.

97
00:07:56,700 --> 00:08:05,040
‫إذن ، الضرر ، على سبيل المثال ، ومن ثم يمكننا الحصول على جسم بياننا ويمكننا فقط استدعاء تلف الطباعة

98
00:08:05,040 --> 00:08:11,990
‫، على سبيل المثال ، إذا كان هناك أي ضرر ليتم عرضه ويمكننا إزالة سجل u هذا بالكامل.

99
00:08:12,000 --> 00:08:19,740
‫هذه هي الطريقة التي نستخدم بها المراجع غير الثابتة كمعلمات خارجية ، وهي طريقة للحصول على قيم إرجاع

100
00:08:19,740 --> 00:08:21,420
‫متعددة من دالة.

101
00:08:21,420 --> 00:08:27,510
‫وعندما نفعل ذلك عادةً ، عندما نستدعي هذه الوظيفة ، سننشئ المتغير ، لكننا

102
00:08:27,510 --> 00:08:29,820
‫لن نعطيه قيمة أولية.

103
00:08:29,820 --> 00:08:37,050
‫إذن في السطر 39 ، لقد تم تحديد ضرر تعويم ، قمت بتمريره على الفور في السطر التالي.

104
00:08:37,050 --> 00:08:41,820
‫وهذه علامة أخرى على أنك تستخدم معلمة خارج.

105
00:08:42,150 --> 00:08:48,450
‫لم أعطيها أي قيمة بشكل صحيح قبل أن أنقلها إلى دالة يعني أنني أتوقع أن تضع

106
00:08:48,450 --> 00:08:51,570
‫هذه الدالة القيمة بالنسبة لي.

107
00:08:51,570 --> 00:08:55,500
‫لذلك قد يكون من الصعب تحديد ذلك في البداية ويمكن أن يكون مربكًا بعض الشيء.

108
00:08:55,500 --> 00:08:58,260
‫لكن هاتين هما القاعدتان اللتان أود أن تتذكرهما.

109
00:08:58,260 --> 00:09:04,380
‫إذا رأيت متغيرًا مُعلنًا عنه ولم يُعط قيمة وتم تمريره على الفور إلى دالة ، اسأل نفسك عما إذا كان

110
00:09:04,380 --> 00:09:05,910
‫هذا متغيرًا خارجًا.

111
00:09:05,910 --> 00:09:13,170
‫والقاعدة الأخرى هي أنك إذا رأيت مرجعًا كمعامل ، لكنه ليس ثابتًا ، فقد يكون هذا أيضًا تلميحًا

112
00:09:13,200 --> 00:09:15,600
‫إلى أن هذه معلمة خارج.

113
00:09:15,600 --> 00:09:21,840
‫وبالطبع إذا تم تسمية المتغير أو المعلمة بشيء ما ، فهذه هبة ميتة مفادها أن هذا الشيء من

114
00:09:21,840 --> 00:09:24,060
‫المفترض أن يكون معلمة خارج.

115
00:09:24,300 --> 00:09:24,960
‫أشياء عظيمة.

116
00:09:24,960 --> 00:09:28,890
‫أعتقد أن هذا وضعنا بشكل جيد للغاية لكوننا قادرين على القيام بعملية مسح.

117
00:09:28,890 --> 00:09:30,990
‫سأراكم في المحاضرة القادمة.

