-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSeason5.cpp
More file actions
2430 lines (1936 loc) · 73.6 KB
/
Season5.cpp
File metadata and controls
2430 lines (1936 loc) · 73.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// In The Name Of God
// Season 5:
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: Compound Statement
// Dar in season gharare bishtar be mas'ale ya Mabhas Scope bepardazim
// Va ye seri topic haye dige sohbat konim
// Berim soragh estelah ( Compound Statement ) ke ba chand estelah
// Dige am nam mibarand:
// -Compound Statement
// -Block Statement
// -Block
// In 3 tayi ke name bordam hamashon be yek ma'ni hastand
// Hala mafhumesh chiye?
// Be ma'ni 0 ya 1 ya bishtar az yek Statement hastesh ke Compiler
// Hamaro be cheshm yek Statement Vahed dar nazar migire.
// Be zaban sade: Pas yek Block majmoei az Statement ha hastesh
// Manzur az majmoei az Statament ha hatman in nist 100 ta Statement dare
// Ehtemal dare 2 ta ya 1 va hata 0 ta Statement bashe
// Statement: دستور
// Hala ba che Symbol ma Block ro moshakhas konim?
// Bracket baz va baste
// {
// Statement
// Statement
// Statement
// }
// So'al? Block haro dar koja mitunim estefade konim?
// Har jayi ke betunim Statement gharar bedim pas Block ham mitunim
// Gharar bedim
// Nokte: Dar payan Block lazem nist Simi colon ( ; ) gharar bedim
// Mesal: { }; Niyazi nist!!!
// Ma ta injaye Season in Block haro ziad didim va estefade kardim
// Be onvan mesal: Ma vaghti miyaym yek Function tarif konim
// Body Functionemun yek Block hast
// Mesal:
// void kill()
// {
// }
// Ya zamani ke az if estefade mikonim bishtar az 1 Statement
// Dar if bayad Block bezarim
// Nokte: Ma mitunim Block to dar to ham benevisim
// Mesal:
/*
int main()
{ //Outer Block
{ // Nested Block OR Inner Block
int x;
} // Nested Block OR Inner Block
} //Outer Block
*/
// Dar mesal bala didim ke daron yek Block mishe yek Block dige gozasht
// Va baz mishe toye onam yek Block dige gozasht
// Mesal:
/*
#include <iostream>
int main() {
std::cout << "Enter Number: ";
int x;
std::cin >> x;
if(x >= 0)
{
if (x % 2 == 0)
{
std::cout << "Number is zoj" << '\n';
}
else
{
std::cout << "Number is Fard" << '\n';
}
}
return 0;
}
Tozihat in code balayi:
Dar code balayi 3 ta To raftegi dashtim ya migan behesh
Sath to dar to
Esm haye English: Nesting Level OR Nesting Depth
Mesal: dar code balayi migim Nesting Level mon 3 hastesh
Nokte: Dar Standard C++ ovarde shode ke Compiler ha bayesti be sorati
Piyade sazi beshan betonan ta omgh 256 ra Support konanad
Farz kon 256 ta to dar to darim vali na ma bayad dar barname khodemun
Ta omgh 3 ela 4 ta to dar to dashte bashim bayad ta jaye ke momken
Barname mon ro kam omgh negah darim chon agar omgh to raftegi ha
Ziyad shavad khanayi ya sazmandehi code ha sakht mishe
Agar didim az omgh 4 ziyad shod behtare codemun ro (Refactor) konim
Refactor = بازسازی
Ta sazmandehi code ha rahat she!!!
*/
// Mesal dar code balayi alaki Nesting Level rafte balad
// Mishe be rahati Refactor kard
// Mesal Refactor code balayi:
/*
#include <iostream>
int main() {
std::cout << "Enter your Number: ";
int num;
std::cin >> num;
if(num >= 0 && num % 2 == 0){
std::cout << "Number is zoj" << '\n';
}
else if(num >= 0)
{
std::cout << "Number is fard" << '\n';
}
return 0;
}
*/
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: Namespace (Part 1)
// Agar yadet bashe dar Season2 dar bare Collision Name ha sohbat kardim
// Va rah halesho ham goftam bayad baraye jolo giri az Collision Name az Namespace estefade
// Konim.
// Yadavari: Collision Name zamani etefagh miofte ke 2 ta Identifier yeksan
// Dar scope yeksani tarif beshan be in sorat Compiler gij mishe va error mide
// Inam begam momken hast Error Linker ham rokh bede
// Mesal Real: Man ba 1 nafar toye yek khone hastim
// Be man mige Control bede be man man vaghti bar migardam
// Mibinam 2 ta Control hast 1ki male TV yeki male Coller
// Hala man gij misham mesl Compiler
// Bayad behesh Error bedam kodum Controll mikhay?
// Har cheghadr barname ma bozorg bozorg tar mishe ehtemal Collision Name ham mire bala
// Ye mesal bezanim kamel ja biofte:
// Farz kon 2 ta file .cpp darim dar har file yek Function darim ba asami yeksan
// Vali mantegheshon fargh dare
// Yani Implementation shon fargh dare kar haye mokhtalef anjam midan:
// Mesal:
/*
// foo.cpp:
int doSomething(int x, int y)
{
return x + y;
}
// goo.cpp:
int doSomething(int x, int y)
{
return x - y;
}
// main.cpp:
#include <iostream>
int doSomething(int x, int y); // Declare
int main()
{
std::cout << doSomething(4, 3);
return 0;
}
*/
// Command: g++ main.cpp foo.cpp goo.cpp -o file.exe
// Nokte age bekhaym faghat main ba foo ro ejra konim moshkeli pish nemiyad
// Vali ma mikhaym 3 tashon ejra konim main, foo, goo
// Natije error mide: duplicate symbol'doSomething(int, int)'
// Compiler gij mishe dar in halat
// Khob 2 ta rah hal:
// Rah hal avval:
// Biaym esm yeki az Function haro taghir bedim
// Vali dar project bozorg tar dard sar hast
// Rah hal dovvom va monaseb:
// Biaym az namespace ha estefade konim
// Dalil in ke Standard Library omad be namespace std montaghel shod jolo giri az hamchin
// Collision Name hayi bod
// Syntax namespace:
// namespace NamespaceIdentifier
// {
// Content of namespace here
// }
// Be hamchin namespace hayi ke khodemun ijad mikonim migan
// user-defined-namespace
// Esmesh roshe dige: namespace hayi ke tavasot user ijad shode
// Nokte: In kalame namespace yek Keyword hast
// Hala berim baraye har kodum namespace ijad konim
// Faghat man dige to yek file hamaro ijad mikonam
// Nemitunam project asli Season5.cpp 3 4 ta konam
// Haminja minevisim ino mitunim dar file haye mokhtalef benevisim:
/*
#include <iostream>
// Ghaede name gozari ham har jur dos dari vali behtare hamashon kochik benevisi
// foo.cpp:
namespace foo {
int doSomething(int x, int y)
{
return x + y;
}
}
namespace goo {
int doSomething(int x, int y)
{
return x - y;
}
}
int doSomething(int x, int y){
return x * y;
}
int main() {
//std::cout << doSomething(4, 3) << '\n';
// Error mide baz chon ma yeki toye namespace foo va goo doSomething ro darim
// In dare toye Global donbalesh migarde
// 2 ta Rah hal:
// 1- Estefade az Scope Resolution Operator
// 2- Estefade az using statements (Ino toye entehaye in Season migam)
// Berim soragh rah hal Scope Resolution Operator
// namespace::Identifier
// Samt chap Operator esm namespace samt rastesh ham esm Function ya harchi ke mikhay
// Mesal:
std::cout << foo::doSomething(4, 3) << '\n';
std::cout << goo::doSomething(4, 3) << '\n';
// Hala payini ro negah kon bedon namespace minevisim
std::cout << ::doSomething(4, 3) << '\n';
// In mire mostaghim toye Global donbalesh migarde
// Khob age Operator gharar nadam baz mire Global donbalesh migarde
std::cout << doSomething(4, 3) << '\n';
// Hal farghesh ine ke
// Age Operator gharar nadim avval toye namespace khodesh ke tarif shode donbalesh migarde
// Age peyda nakard mire bala bala age bazam peyda nakard mire Global
// Vali age Operator gharar bedim :: mostaghim mire Global donbalesh migarde
return 0;
}
*/
// Ye mesal codi baraye Gharar dadan Operator :: va gharar nadadan hich chiz:
/*
#include <iostream>
void print(){
std::cout << "World!" << '\n';
return;
}
namespace foo {
void print(){
std::cout << "Hello ";
}
namespace printAll
{
void printAll()
{
print(); // Miad toye foo ejra mikone
::print(); // Mostaghim mire Global
}
}
}
int main() {
foo::printAll::printAll();
return 0;
}
*/
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: Namespace (Part 2)
// Khob ma majbur nistim mavaredi ke marbot be yek Namespace mishe ro hamasho
// Biaym dar yekja ta'rif konim balke mitunim dar chandin file ya dar chandin
// jaye yek file ta'rif konim
// Mesal:
/*
#include <iostream>
// 2 Ta namespace ba Identifier yeksan darim
// Ba in code zir khastam begam
// Majbur nistim harchi darim bayad berizim yek namespace moshakhas
// Mitunim toye 1 namespace moshkhas harja dos darim Variable, Function va ..
// Ta'rif konim barash!!!
namespace basicMath {
int x = 50;
}
void ali() {
std::cout << basicMath::x << '\n';
return;
}
namespace basicMath {
double y = 43.0;
}
int main() {
ali();
std::cout << basicMath::y << '\n';
return 0;
}
*/
// Yek mesal dige dar mored in dar Folder: namespace_Season6
// Hast hatman onja ham negah kon ba Header File ha in karo anjam dadam
// Ta kamel ja biofte ba mesal
// Mored ba'adi: zamani ke miaym codemun be chand file .cpp mishkonim
// Va toye on file hamon age namespace bashe majburim on namespace ro
// Ham dar Source file va ham dar Header File ya jayi ke mikhaym
// Forward Declaration konim bayad on namespace ham bashe
// Mesal in tozihat balayi dar Folder: namespace_Season6(P2)
// Agar ma namespace ro dar Source File gharar nadim Linker nemitune
// Function ke ta'rif kardim be esm add() ro peyda kone
// Chera nemitune peyda kone? Chon ta'rif add() mire toye Global Namespace
// Va ba'es mishe Linker natune peyda kone
// Va toye source Main.cpp goftim boro az namespace
// basicMath::add() peydash kon va age nabashe nemitune peyda kone!!!
// Hala age namespace dar Header File gharar nadim chi?
// Nemitune on moghe khod namespace peyda kone
// Declare function dar Global etefagh miofte
// Pas: Namespace bayad ham dar source file bashe ham jayi ke mikhaym
// Forward Declaration konim Header_File ya khod main
// Mored ba'adi: Namespace ha mitunan to dar to bashan
// Ya'ni dar yek namespace yek namespace dige mishe nevesht
// Mesal:
/*
#include <iostream>
namespace foo{
namespace goo{
int mines(int x, int y){
return x - y;
}
}
}
// Ba'ad Standard C++17 be ba'ad injuri ham mishe:
namespace foo::goo{
int add(int x, int y){
return x + y;
}
}
// Ye tozihat hala age khastim dakhel foo ham chizi benevisim dar in ke nemishe
// In faghat dakhel goo hast zir majmoye foo
// Baraye foo mitunim ye namespace baz konim benevisim mesal:
namespace foo{
int multiphication(int x, int y){
return x * y;
}
}
int main() {
std::cout << foo::goo::mines(4, 4) << '\n';
std::cout << foo::goo::add(4, 0) << '\n';
std::cout << foo::multiphication(2, 2) << '\n';
// Baraye rahati mitunim yek Alias ta'rif konim
// Dige nanevisim foo::goo::Identfier in tolanie
// Mesal:
namespace active = foo::goo; // Injuri behtare
std::cout << active::add(99, 1) << '\n';
return 0;
}
*/
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: Local Variable
// Dar Season haye ghabl dar mored Local Variable sohbat karde budim
// Local Variabe chi bod?
// Be Parameter haye yek Function va hamchenin Variable hayi ke daron yek Function
// Ta'rif mishan migan Local Variable
// Dar zaban C++ intori nist ke yek Vizhegi moshakhasi vojud dashte bashe ke begim
// In tafavot Local Variable ha ba Variable haye gheyr mahali ya'ni
// Tafavot beyn Local Variable ha ba Global Variable hast bayad begam yek vizhegi haye
// Mokhtalefi vojud dare ke Local Variable ha ro az Gheyr Local Variable ha
// Motamayez mikone
// Jolo tar ha Property haro migam daghighan che vizhegi darand
// Property = ویژگی
// Dar season haye ghabli dar mored Scope ha ham sohbat kardim
// Scope yek Identifier ro moshakhas mikone ke on Identifier dar koja mitune
// Dar dast ras bashe va ghabel estefade bashe
// Agar on Identifier dast ras bod migoftim: In-Scope
// Age az dast ras kharej bashe va gheyr ghabel estefade bashe migoftim: Out of Scope
// Nokte: Age be Identifier ke Out Of Scope bashe say konim dast rasi peyda konim behesh
// Va Error Compiler movajeh mishim
// Nokte: Local Variable ha az manzar vizhegi Scope Block-Scope hastand
// Hala in daghighan ya'ni chi? Ya'ni inke Variable ha az noghteyi ke ta'rif shodan
// Ta payan on Block ke darunesh ta'rif shode dar dast ras hast ya'ni In-Scope
// Mesal:
/*
int main() {
int x = 5; // x enters scope here
double y = 4.0; // y enters scope here
return 0;
} // x and y go Out Of Scope here
*/
// Va goftim Parameter ham Local Variable mahsob mishe mesal:
/*
int max(int x, int y) { // x and y enters scope here
int max = ((x > y) ? x : y); // max enters scope here
return max;
} // max, x and y leave scope here
*/
// Nokte: Shayad begi x, y ke ghabl az Block ta'rif shodan
// Bale be nazar yek Ensan doruste vali ghavaedesh mige dakhel Block be hesab miad
// Nokte: Asami Variable ha ke dar yek Block ta'rif mishan bayad (Unik) bashe
// Dar gheyr in sorat Error
// Mesal:
/*
void someFunction(int x) {
int x;
return;
}
// In code be ma error mide chon 2 ta Identifier yeksan dar yek Block ta'rif shode
// Doruste yeki Parameter hast yeki Variable ma'moli vali ba har 2 ta
// Yeksan raftar mishe!!!
*/
// Mored ba'adi:
// Yek mafhumi vojud dare be esm: Variable Storage Duration
// Khob in Duration chiye?
// Ghavaedi hast ke ta'yin mikone ke yek Variable che zamani va chetor ijad mishe
// Va az beyn mire
// Dar bishtar hala Duration yek Variable be sorat mostaghim Life-Time sho ta'yin mikone
// Life-Time yek bar goftim: Yek Variable che noghteyi ijad mishe va koja az donya mire
// Local Variable ha az manzar Duration daraye Automatic Duration hastand
// Ya'ni chi? Be in ma'ni ke dar noghteyi ke ta'rif mishan sakhte mishan
// Va dar payan Block az beyn mirand
// Mesal:
/*
int main() {
int x = 5; // Variable x dar inja be vojud miyad va meghdar dahi mishe
double y = 4.0; // Variable y dar inja be vojud miyad va meghdar dahi mishe
return 0;
} // Variable haye x va y har 2 ta inja az beyn mirand
*/
// So'al: Shayad begi shabih Scope nist?
// Na bebin Scope dar dast ras budan va dar dast ras nabudan moshakhas mikone
// In Duration be vojud omadan va az beyn raftan mige
// Yekja goftam Automatic Duration:
// Ya'ni khodeshon khodkar be donya miyan va khodkar ham az beyn mirand
// Local Variable ha mitunan toye Block haye to dar to ham ta'rif beshan
// Vali ghavaed hamune ham baraye Scope ham Duration
// Mesal:
/*
int main() {
int x = 5; // x enters scope and is created Or (Duration) here
{ // Nested Block
int y = 7; // y enters scope and is created Or (Duration) here
} // y goes out of scope and is destroyed here
// y can not be used here because it is out of scope in this block
// Mesal:
//y = 5; // Error
return 0;
} // x goes out of scope and is destroyed here
*/
// Mored ba'adi:
// Ma ta inja 2 ta Property goftim: Scope va Variable Storage Duration
// Yeki am hast
// Be esm Linkage
// In Linkage chiye hala?
// Aya sayer Identifier hayi ke ba hamon esm ta'rif shodan be hamon Identifier ke
// Ghablan ta'rif shodan eshare darand ya kheyr?
// Mesal: Yek Identifier x darim va dar jaye dige am yek Identifier x darim
// Hala in 2 ta daran be yek Object moshakhasi dar hafeze RAM eshare mikonand?
// x , x --> Object
// Vali yek mogheyi hast in 2 ta x har chand esmeshon yeki hast
// Vali be Object haye mokhtalefi dar hafeze RAM eshare daran
// x --> Object
// x --> Object
// Khob Local Variable ha az manzar Linkage: Aslan Linkage nadarand xD
// Ya'ni har Declaration (Ham define va ham declare be hesab miad)
// Tanha marbot be yek Object mishe baraye Local Variable
// Joda joda Object darand
// Mesal:
/*
int main() {
int x = 5;
{
int x = 3;
}
return 0;
}
*/
// Dar code balayi 2 ta x darim
// Har 2 tashonam Local Variable hastand
// Vali Linkage nadarand
// Ya'ni x ke dar Outer Block hast
// Ba x ke daron Nested Block hast
// Hich rabti be ham dige nadarand
// 2 ta shon object haye mokhtalefi dar hafeze RAM darand
// Bazam shayad begi in Linkage moshabeh Scope ya Duration hast?
// Vali kheyrrrrr
// In 3 ta Property har kodum yek tafavot khasi darand
// 1-Scope: Dast ras bodan Local Variable In-Scope va
// Dast ras nabodan Local Variable Out Of Scope be ma mige
// 2-Duration: Be vojud omadan va az beyn raftan Local Variable ro be ma mige
// 3-Linkage: Aya 2 ta ya chand ta Variable ke ba Identifier yeksan mesal x
// Daran be yek Object moshkhasi dar hafeze RAM eshare mikonanad
// Ya joda joda hastand
// Mored ba'adi:
// Nokte: Deghat kon Variable hato koja ta'rif kardi
// Ya'ni jayi ke niyaz dari ta'rif kon
// Mesal:
/*
#include <iostream>
int main() {
int x = 0;
// x dar inja dast ras hast
{
// x dar inja dast ras hast
// Mesal age y faghat dakhel yek Block niyaz dari
// Haminja ta'rif kon nayad birun ta'rif kon
int y = 5;
// y dar inja dast ras hast
std::cout << y << '\n';
} // Inja y az beyn mire
// x dar inja dast ras hast
return 0;
} // Inja x az beyn mire
*/
// Harja lazem dari biyaresh ta'rif kon!!!!
// Ye mesali bezanim ke mikhaym
// Yek variable har dar Scope khodesh ham dar yek Block dige estefade konim
// Faghat ye mesale negah kon:
/*
#include <iostream>
int main() {
int x = 5;
{
int y;
std::cin >> y;
if (y == 4)
x = 0;
}
std::cout << x << '\n';
return 0;
}
*/
// Mesl in kar haro bar hasb niyazet ta'rif kon!!!
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: Global Variable
// Khob dar jalase ghabl Local Variable haro yad gereftim
// Hala mikhaym Global Variable haro yad begirim
// Dar zaban C++ Variable ha mitunan kharej az Function ta'rif beshan
// Be Variable hayi ke kharej az Function ta'rif mishan migan Global Variable
// Mesal:
/*
#include <iostream>
int g_x{}; // Global Variable
int main() {
std::cout << g_x << '\n';
return 0;
}
*/
// Aksar C++ kar ha Global Variable ha ro ba'ad az #include ha gharar midan
// Va in behtare be nazar man!!!
// C++ haye ghadimi kar vaghti Global Variable ta'rif mikonan dar
// Identifier ghabl esm asli yek g_ mizaran
// Mesal: g_number, g_x, g_age, g_subtraction, g_division
// Vaghti har jaye code didim yek Identifier estefade shode ke
// Avvalesh ba g_ shoru mishe mifahmim Global Variable hast!!!
// Nokte: Dar har Functioni mitunim be in Global Variable ha dast rasi peyda konim
// Mesal:
/*
#include <iostream>
int g_x = 50;
int g_y = 0;
void doSomething() {
std::cout << g_x << '\n';
return;
}
int main(){
doSomething();
std::cout << ++g_y << '\n';
return 0;
}
*/
// Dar jalase ghabli 2 ta mafhum yad gerftim
// Hamon Property haye Variable
// 1- Scope
// 2- Duration
// Ke goftim in Local Variable daraye Block Scope va Automatic duration hast
// Khob taklif Global Variable ha chi?
// Global Variable az manzar vizhegi Scope daraye ( Global namespace scope )
// ya ( Global Scope ) va ye seria am migan ( File Scope ) hast
// Va az manzar Vizhegi Duration daraye ( Static Duration ) hastand
// Khob hala in ya'ni chi ke daraye ( Global Scope ) hast?
// Ya'ni az noghteyi ke ta'rif shodan ta payan on file ke tosh ta'rif shodan
// Dar dast ras hast !!!
// Va ( Static Duration ) chiye?
// Zamani ke barname shoru mishe be vojud miyad zamani ke barname be payan berese
// Az beyn mirand !!!
// Pas vaghti barname ro ejra mikonim be vojud miyan va baghi mimanand ta payan
// Barname be hamin dalil migan Static Duration
// Mored ba'adi: Global Variable ha bar khalaf Local Variable ha be sorat Automatic
// Ya default daraye Zero-Initialized hastand
// Ya'ni age meghdar dahi avvalie nakonim be sorat default
// 0 hastand
// Mesal:
/*
#include <iostream>
int g_x; // Zero-Initialized
int main() {
std::cout << g_x << '\n';
return 0;
}
*/
// Variable hayi ke daraye Static Duration hastand defaulteshon 0 hast !!!
// Mored ba'adi: Global Variable ha ham mitunan Constant bashan
// Ya'ni sabet vali meghdar dahi avvalie mikhad vagarne error
// Mesal:
/*
// const int g_x; // Error
// constexpr int g_y; // Error
const int g_x{}; // Out --> 0
constexpr int g_y{}; // Out --> 0
const int g_xz = 5; // Out --> 5
constexpr int g_yz = 10; // Out --> 10
*/
// Nokte: Global Variable dar fili ke ta'rif mishe hame jash dar dast ras ast
// Va niyaz nist az yek function be function dige pass bedim
// Vali in kar eshtebahe
// Baraye rahati naya az Global estefade kon ke hame ja dar dast ras bashe
// Rahat bashe in eshtebahe dar jaye khodesh dar ayande az in Global estefade mikonim.
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: Variable Shadowing
// Dar in jalase gharare dar mored mafhum Shadowing sohbat konim
// Ma ino midunim ke har Block Scope marbut khodesh ro dare
// Mesal:
/*
Alan in Block 1 va 2 Scope marbut khodeshon ro darand
// Age dar har 2 ta in int x; bashe Collision Name sorat nemigire
// Kamelan az ham jodan!!!
{
{
1
}
{
2
}
}
*/
// Age hala in Block ha to dar to bashe chi?
// Mesal:
/*
Agar dar har 2 ta Block int x; ta'rif konim
Che etefaghi miofte? Dar in halat Shadowing pish miyad
On x ke dar Block 1 ta'rif shode az did Block 2 makhfi mishe
Be in makhfi shodan migan Shadowing
{
1
{
2
}
}
*/
// Mesal:
/*
#include <iostream>
int main() {
int apples = 9;
{// Nested Block
std::cout << ++apples << '\n';
int apples;
apples = 6;
std::cout << --apples << '\n';
}
std::cout << apples << '\n';
return 0;
}
*/
// Tozihat code balayi: Man omadam toye Block 1 ya Block biruni
// Ye Variable apples ta'rif kardam in Variable Block biruni
// Ham dar Block khodesh ya'ni biruni dar dast ras hast ham dar
// Nested Block
// Hala dar Nested Block ba hamon esm apples ye Variable ta'rif kardam
// Dar Nested Block Variable ke ta'rif kardam ta payan Block daruni
// Har vaght begim apples be hamon Variable eshare darim ke dar Nested Block
// Ta'rif kardim
// Hanoz on Block biruni ro darim vali ba'ad az tamum shodan Block daruni
// Mishe estefade kard mesal code balayi bebini motavajeh mishi
// Inayi ke goftam faghat baraye Local Variable ha bod
// Berim soragh Global Variable ha bebinim ona chejuri an
// Dar mesal ghabli yek Local Variable omad yek Local Variable dige ro
// Shadow kard
// Hala yek Local Variable mitune yek Global Variable az ghabl ta'rif shode
// Ro Shadow bekone
// Mesal:
/*
#include <iostream>
int value = 5;
void foo() {
std::cout << value << '\n';
return;
}
int main() {
int value = 21;
value = 11;
std::cout << value << '\n';
foo();
return 0;
}
*/
// Tozihat code balayi:
// Daron function main ebteda yek Local Variable be esm Value ta'rif kardim
// Va on Local Variable omad on Global Variable ke kharej function main
// Ta'rif shode ro Shadow kard
// Dar mesal codi bala: Local Variable omad Global Variable ro Shadow kard
// Mesal codi dige:
/*
#include <iostream>
int value = 5;
int main() {
std::cout << --value << '\n';
int value = 9;
++value;
std::cout << value << '\n';
// Baraye dast rasi be Global Variable mitunim az
// Scope Resolution Operator estefade konim:
++(::value);
std::cout << ::value << '\n';
return 0;
}
*/
// Nokte akhar: Ta jaye momken az Shadowing parhiz kon
// Khanayi code ro miyare payin va dar project haye bozorg
// Ehtemal be vojud omadan Bug hast !!!
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: Internal Linkage
// Dar jalase ghabl dar mored Linkage sohbat kardim ke goftim
// Linkage yek Identifier moshakhas mikone ke aya sayer
// Declaration hayi ke hamnam on Identifier hastand on ha ham be yek Object
// Yeksani eshare mikonand ya na
// Va goftim Local Variable ha faghed Linkage hastand ya'ni Linkage nadarand
// Identifier hayi ke daraye Linkage hastand mitunan
// Yeki az in 2 noe Linkage bashan:
// 1- Internal Linkage
// 2- External Linkage
// Dar in jalase be Internal mipardazim jalase ba'ad be External !
// Internal Linkage chist? Yek Identifier ke Internal Linkage bashe
// Tanha dakhel hamon file ke ta'rif shode dar dast ras va ghabel estefade hast
// Ya'ni dige nemishe dar file haye dige behesh dast rasi peyda kard
// Mesal: Agar dar 2 file motafavet 2 ta Identifier ba esm yeksan dar har file
// Dashte bashim va daraye Internal Linkage bashan az hamdigar mostagham
// Va joda hastand hich rabti be ham nadarand
// Hala berim soragh Global Variable ha ke daraye Linkage hastand ham:
// Internal Linkage ham External Linkage
// Agar yek Global Variable daraye Internal Linkage bashe behesh
// Internal Variable ham migan
// Mohem: Yek Global Variable gheyr Constant bekhaym Internal konim kafiye
// Az keyword ( static ) ghablesh estefade konim
// Chera goftam gheyr Constant? chon age age Global Variable Constant bashe
// Be sorat Default Internal hastand
// Che static estefade koni barash che nakoni farghi nemikone
// Mesal:
// Internal Linkage
// static int g_x;
// External Linkage
// int g_y;
// Age na Constant na Static bashe Global Variable daraye External mishe
// Ke jalase ba'adi kamel dar moredesh migam
// Mesal Constant:
// Internal Linkage:
// const int g_x;
// Internal Linkage:
// constexpr int g_y;
// Mesal codi:
/*
Main.cpp:
static int g_x;
*/
/*
a.cpp:
constexpr int g_x;
*/
// In 2 ta kamelan az ham mostaghel hastand g_x ke dar file main.cpp hast
// Faghat dar on file main ghabel estefade va dar dast ras hast
// g_x dar a.cpp ham hamintor faghat dar file khodesh dar dast ras hast
// Nokte: Dar Season haye ghabl yek gha'ede goftim dar zaban C++ vojud dare
// Be esm ODR : One Definition Rule
// Ke migoft yek Object ya yek function va ....
// Nemitune bish az yek bar Definition dashte bashe
// Che dar kol barname che dar file
// Bala yek code neveshtam main.cpp va a.cpp
// Shayad begi in ghavanin man zir pa daram migozaram
// Vali na Object hayi ke Internal hastand hich rabti be ham nadarand
// Kamelan az ham mostaghel hastand
// Mored ba'adi:
// Vizheghi Linkage tanha marbut be Variable ha nemishe
// Balke marbot be Identifier ha mishe ya'ni Function ha ham in Vizheghi
// Linkage ro darand
// Function ke ma ta'rif mikonim be sorat Default External hastand
// Function have external Linkage by default
// Hala age khastin function daraye Internal bashe
// Az keyword Static estefade mikonim
// Mesal:
/*
add.cpp:
static int add(int x, int y)
{
return x + y;
}
*/
/*
main.cpp:
#include <iostream>
int add(int x, int y); // Forward Declaration
int main()
{
std::cout << add(2, 5) << '\n';
return 0;
}
*/
// Code safhe bala ba khataye Linker movajeh mishe
// Chon Functioni ke estefade kardim toye add.cpp
// Faghat ghabel estefade hast
// Chon ma ba Static on ro Internal kardim
/*--------------------------------------------------------------------------------------------------------------------*/
// Mabhas: External Linkage
// Jalase ghabl Internal yad gereftim ke estefade az yek Identifier tanha
// Be yek file mahdud mikone
// Hala External Linkage: Identifier ke daraye External bashe ham mitune
// Dar file ke ta'rif shode mored estefade gharar begire
// Va ham kharej az on file mored estefade gharar migirad:
// (Ama be shart gharar dadan Forward Declaration)
// Dar avayel in dore yad gerftim ke chejuri yek Function dar file dige estefade konim
// Chon Functioni ke ta'rif mishe be sorat Default External hast
// Mored ba'adi: Dar jalase ghabl goftim Global Variable ke daraye
// Internal Linkage bashan beheshon migan ( Internal Variable )
// Hala be Global Variable ke daraye External Linkage bashe
// Behesh migan ( External Variable )
// Hala age bekhaym yek Global Variable daraye External konim bayad az
// Keyword ( extern ) estefade konim
// Goftim dar Global Variable haye gheyr Constant daraye External ast
// Be sorat Default
// Mesal: