Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
#186
#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)

🔹متغییر استاتیک عمومی

طرز کار متغییر استاتیک عمومی همانند متغییر استاتیک محلی است ولی با این تفاوت که متغییری که از نوع عمومی تعریف می شود در همه جا قابل شناسایی هست ولی متغییری که از نوع استاتیک محلی تعریف می شود فقط داخل تابعی که تعریف می شود شناخته شده است

⛔️ طول عمر متغییر استاتیک عمومی همانند متغییر سراسری ( متغییری که بالای main نوشته می شود) هست

مثال) برنامه ای که نحوه استفاده از متغییر استاتیک عمومی را نمایش می دهد
#include <iostream>

using namespace std;


static int score;


void test()

{

score++;

}


int main()

{

test();

cout<<score<<endl;//cout 1

test();

cout<<score<<endl;//cout 2

test();

cout<<score<<endl;//cout 3

return 0;

}

همانطور که در کد بالا دیدید کد static int score بالای main نوشته شده که این کار باعث شده هم مقدار صفر به صورت پیش فرض درون متغییر قرار بگیرد و هم متغییر score در تمامیه توابع دیگر قابل شناسایی باشد
@Learncpp
#187
#storage_class #storage #class #static
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس های حافظه استاتیک (static)

🔺متغییر استاتیک محلی
🔺متغییر استاتیک عمومی

⛔️ چه تفاوتی بین متغییر سراسری با متغییر استاتیک عمومی هست؟

متغییری که به صورت سراسری تعریف می شود با متغییری که از نوع کلاس استاتیک عمومی تعریف می شود هیچ تفاوتی ندارند به شرطی که در یک فایل باشند ولی گاهی لازمه که برنامه ای که می نویسید دارای چندین فایل باشد اینجاست که تفاوتی ایجاد می شود و آن هم این است که متغییری که به صورت سراسری تعریف می شود می توان در فایل های دیگر با استفاده از کلاس حافظه خارجی (telegram.me/Learncpp/507) از آن استفاده کرد ولی متغییری که از نوع کلاس حافظه استاتیک عمومی تعریف می شود فقط در همان فایلی که قرار دارد قابل دسترسی و شناسایی هست
@Learncpp
#188
#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C

🔹کلاس حافظه خارجی (extern)

گاهی اوقات در برنامه نویسی ممکنه بدلیل خوانایی و درک بهتر خطوط برنامه یا بزرگ بودن پروژه, کدهای برنامه داخل چندین فایل تقسیم بندی می شوند حال اگر بخواهیم متغییری که در یکی از فایل ها تعریف کرده ایم در فایل های دیگر از این متغییر استفاده کنیم باید از کلاس حافظه خارجی (extern) استفاده کنیم مثلا فرض کنید دو فایل به اسم file1.cpp و file2.cpp ایجاد کرده اید که در file1 متغییری (یا تابعی) به صورت سراسری (بالای main) به اسم code تعریف میکنید حال بنا به دلایلی می خواهید از این متغییر درون file2 (یا تعداد فایل های بیشتر) استفاده کنید برای اینکه بتوان از متغییر code که در file1 تعریف کرده اید در file2 استفاده کنید باید متغییری با همان نوع داده (telegram.me/Learncpp/91) و اسم متغییری که در file1 تعریف کرده اید در file2 نیز تعریف کنید با این تفاوت که قبل از نوع داده extern قرار بدهید تا به کامپایلر بفهمانید که قرار است از متغییری که در جایی دیگر تعریف شده با بکار بردن کلمه extern می خواهیم استفاده کنیم و دوباره برایش حافظه ای نگیرد

🔹نحوه تعریف متغییری از نوع کلاس حافظه خارجی (extern)
extern int number;
@Learncpp
#189
#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)

⛔️ متغییر یا توابعی که فقط قرار هست یکبار تعریف کنیم و در فایل های دیگر توسط extern از آنها استفاده کنیم باید حتما در فایلی که main ما وجود دارد تعریفشان کنیم تا با خطایی از طرف کامپایلر مواجهه نشیم یعنی در فایلی که mian برنامه تعریف شده متغییر یا تابع را تعریف کنیم و در فایل های دیگه که main ندارند با استفاده از extern به این متغییر یا توابع تعریف شده در دسترسی داشته باشیم

⛔️ زمانی که متغییر یا تابعی را بالای main تعریف می کنید کامپایلر برایشان حافظه ای می گیرد ولی وقتی بخواهید در فایل های دیگر با استفاده از extern به این متغییر یا توابع دستیابی داشته باشید کامپایلر دیگر برایشان حافظه ای نمی گیرد چون از همان حافظه ای که در فایلی که تعریفشان کردید استفاده می کند و در مصرف حافظه صرفه جویی خواهد شد

⛔️ وقتی می خواهیم از extern استفاده کنیم باید تمام فایل ها از یک پروژه باشند به خاطر همین دلیل وقتی یک متغییر یا تابعی را extern می کنیم نیازی به include کردن کتابخانه ای نیست و کامپایلر به صورت اتوماتیک تشخیص می دهد وقتی از extern استفاده کرده ایم یعنی از قبل داخل فایل اصلی تعریفشان کرده ایم

برای درک بهتر مطلب گفته شده به مثال (telegram.me/Learncpp/509) دقت کنید
@Learncpp
#190
#storage_class #storage #class #extern
✅کلاس های حافظه (Storage Class) در ++C
🔹کلاس حافظه خارجی (extern)

مثال) نحوه تعریف متغییر و توابع و چگونگی استفاده آنها در فایل های دیگر با استفاده از کلاس حافظه خارجی (extern)

ابتدا باید یک پروژه جدید به اسم file1 ایجاد کنیم که مراحل ساخت پروژه Visual Studio در پست (telegram.me/Learncpp/158) و مراحل ساخت پروژه در Code::Blocks در پست (telegram.me/Learncpp/166) به صورت تصویری آموزش داده شده است بعد از اینکه پروژه را ایجاد کردید باید فایل دیگری به اسم file2 به پروژه اضافه کنید که نحوه اضافه کردن فایل در Visual Studio در پست (telegram.me/Learncpp/346) به صورت تصویری آموزش داده شده است
پس از اینکه file1 و file2 رو ایجاد کردید باید دنبال فایلی باشیم که main برنامه ما داخلش هست و کد های زیر را در آن بنویسیم
//file 1
#include <iostream>

#include <string>

using namespace std;


void using_extern();

string name;


int main()

{

using_extern();

return 0;

}

و در file2 کد های زیر را قرار می دهیم
//file 2
#include <iostream>

#include <string>

using namespace std;


extern string name;


extern void using_extern()

{

name="Learning C++ in channel @Learncpp";

cout<<name;

}

همانطور که دیدید در file1 یک متغییری رشته ای به نام name و یک تابع به نام using_extern تعریف کرده ایم و توسط کامپایلر برایشان حافظه می گیریم, در file2 برای استفاده از این متغییر و تابع که در file1 تعریف شده توسط extern به کامپایلر دستور می دهیم که برای متغییر name و تابع using_extern که در file2 تعریف کرده ایم حافظه ای نگیرد به دلیل اینکه آنها را در file1 تعریف کرده ایم و در پایان با صدا زدن اسم تابع در درون main متغییر name چاپ می شود
@Learncpp
#191
#function #exam #call_by_value
☑️ توابع
تمرین)
برنامه ای بنویسید که دو عدد را از ورودی گرفته و دو واحد به آنها اضافه کرده سپس آنها را چاپ کند؟ (از روش call by value استفاده شود)
@Learncpp
#192
جواب تمرین #191
#include <iostream>
#include <string>
using namespace std;

void add_number(int num1,int num2);

int main()
{
int num1=1,num2=2;
add_number(num1,num2);
cout<<endl;
cout<<"original num1 is : "<<num1<<endl;
cout<<"original num2 is : "<<num2<<endl;
return 0;
}

void add_number(int num1, int num2)
{
num1=num1+2;
num2=num2+2;
cout<<"num1 is : "<<num1<<endl;
cout<<"num2 is : "<<num2<<endl;
}

@Learncpp
#193
#function #exam #call_by_value
☑️ توابع
تمرین)
برنامه ای بنویسید که تابع show را طوری سربارگذاری کند که توانایی دریافت چندین آرگومان را داشته باشد سپس آرگومان های دریافتی را چاپ نماید؟
@Learncpp
#194
جواب تمربن #193
#include <iostream>

#include <string>

using namespace std;


void show(string course);

void show(string course, int unit);

void show(string course, int unit, int score);


int main()

{

show("Riazi");

cout<<endl;

show("Riazi", 2);

cout<<endl;

show("Riazi", 2, 18);

cout<<endl;

return 0;

}

void show(string course)

{

cout<<"course name is : "<<course<<endl;

}

void show(string course, int unit)

{

cout<<"course name is : "<<course<<endl;

cout<<"The number of units of  "<<course<<" is : "<<unit<<endl;

}


void show(string course, int unit, int score)

{

cout<<"course name is : "<<course<<endl;

cout<<"The number of units of  "<<course<<" is : "<<unit<<endl;

cout<<"The course grade "<<course<< " is : "<<score<<endl;

}


@Learncpp
#195
#function #exam #call_by_value
☑️ توابع
تمرین)
برنامه ای بنویسید که با استفاده از template ها هر نوع داده ای را از ورودی گرفته و آنها را چاپ کند؟
@Learncpp
#196
جواب تمرین #195
#include <iostream>
#include <string>
using namespace std;

template <class T1,class T2>
void show(T1 num1, T2 num2)
{
cout<<"num1 is : "<<num1<<endl;
cout<<"num2 is : "<<num2<<endl;
}

int main()
{
show("C++", "Learncpp");
show(40, 30.2);
show('C', "++");
return 0;
}

@Learncpp
tabenevisi.mp4
43.5 MB
#197
👁‍🗨 آموزش تابع نویسی
فرمت : mp4
زمان : 28:16
حجم : 43.4 MB
زبان : فارسی
مدرس : نامعلوم
@Learncpp
توابع-حوزه متغییر-کلاس حافظه.mp4
121.6 MB
#198
👁‍🗨 تابع نویسی-حوزه متغییر-کلاس حافظه
فرمت : mp4
زمان : 0:39:35
حجم : 121 MB
زبان : فارسی
مدرس : جعفری نژاد
محل تدریس : دانشگاه شریف
@Learncpp
inline-template.mp4
52.5 MB
#199
👁‍🗨 آموزش template - inline
فرمت : mp4
زمان : 0:17:10
حجم : 52.4 MB
زبان : فارسی
مدرس : جعفری نژاد
محل تدریس : دانشگاه شریف
@Learncpp
template.mp4
37.4 MB
#199
👁‍🗨 آموزش template
فرمت : mp4
زمان : 0:12:05
حجم : 37.3 MB
زبان : فارسی
مدرس : جعفری نژاد
محل تدریس : دانشگاه شریف
@Learncpp
🎀 اتمام آموزش توابع
@Learncpp
📚 فهرست آموزش های کانال

📓 جلسه اول (مقدمات زبان ++C)
telegram.me/Learncpp/534
📘 جلسه دوم (ساختارهای تکرار و تصمیم گیری)
telegram.me/Learncpp/535
📗 جلسه سوم (آرایه ها)
telegram.me/Learncpp/536
📙 جلسه چهارم (توابع)
telegram.me/Learncpp/537
📽 فیلم های آموزشی
telegram.me/Learncpp/538
💻 نرم افزار های مرتبط
telegram.me/Learncpp/540
🙇🏻 دانستنی ها
telegram.me/Learncpp/539
🌍 ترجمه کتابخانه ها از سایت مرجع ++www.cpluplus.com) C)
فعلا ترجمه کتابخانه ای در کانال قرار نگرفته, در صورتی که ترجمه ای در کانال قرار بگیرد این لیست بروز رسانی خواهد شد

کمک به بچه های سرطانی :
💝 telegram.me/Learncpp/542

⛔️ از آنجا که مطالب کانال از جایی کپی پیس و دزدیده نمی شود و تمامیه مطالب درون word تایپ شده سپس پس از تکمیل داخل کانال قرار می گیرند.
با این شیوه سعی بر این داریم کلیه مطالب را پوشش دهیم به همین خاطر ممکن هست به دلیل گردآوری مطالب، مدت زمانی درون کانال آموزشی قرار نگیرد پس "لطفا صبر پیشه کنید"...
@Learncpp
📌 جلسه اول (مقدمات برنامه نویسی)
telegram.me/Learncpp/84

💡 حافظه چیست
telegram.me/Learncpp/85
💡 داده های صحیح
telegram.me/Learncpp/86
💡 داده های منطقی
telegram.me/Learncpp/87
💡 داده های کاراکتری
telegram.me/Learncpp/88
💡 انواع داده ها و مقادیر قابل قبول
telegram.me/Learncpp/91
💡 انواع داده ها در ++C
telegram.me/Learncpp/92
💡 متغییر چیست و نحوه تعریف متغییر
telegram.me/Learncpp/105
💡 قوانین نامگذاری متغییر ها
telegram.me/Learncpp/107
💡 روش های مقدار دادن به متغییرها
telegram.me/Learncpp/108
💡ثابت ها چیست
telegram.me/Learncpp/112
💡انواع ثابت ها
🎈 با استفاده از define
telegram.me/Learncpp/113
🎈با استفاده از const
telegram.me/Learncpp/115
💡عملگر چیست
telegram.me/Learncpp/118
🎈عملگر انتساب (=)
telegram.me/Learncpp/119
🎈عملگرهای محاسباتی
telegram.me/Learncpp/121
🎈عملگرهای ترکیبی
telegram.me/Learncpp/122
🎈عملگرهای افزایش و کاهش
telegram.me/Learncpp/123
🎈عملگرهای رابطه ای و تساوی
telegram.me/Learncpp/124
🎈تقدم عملگرهای حسابی
telegram.me/Learncpp/129
🎈تقدم عملگرهای ترکیبی
telegram.me/Learncpp/130
🎈تقدم عملگرهای رابطه ای
telegram.me/Learncpp/131
🎈 تقدم عملگرهای منطقی
telegram.me/Learncpp/132
💡ساختار برنامه در ++C
telegram.me/Learncpp/137

📌 پایان آموزش جلسه اول (مقدمات برنامه نویسی)
@Learncpp
📌 جلسه دوم (ساختارهای تکرار و تصمیم گیری در ++C)
telegram.me/Learncpp/174

💡 دستور if و else-if
telegram.me/Learncpp/176
💡 دستور switch
telegram.me/Learncpp/181
💡حلقه تکرار while
telegram.me/Learncpp/186
💡حلقه تکرار do-while
telegram.me/Learncpp/191
💡تفاوت while با do-while
telegram.me/Learncpp/194
💡حلقه ی تکرار for
telegram.me/Learncpp/195
💡تمارین جلسه دوم
telegram.me/Learncpp/205

📌 پایان آموزش دوم (ساختارهای تکرار و تصمیم گیری در ++C)
@Learncpp
📌 جلسه سوم (آرایه ها)
telegram.me/Learncpp/268

💡آرایه چیست
telegram.me/Learncpp/270
💡نحوه تعریف آرایه ها
telegram.me/Learncpp/271
💡آرایه های یک بعدی
telegram.me/Learncpp/273
💡ارسال آرایه ها به توابع
telegram.me/Learncpp/278
💡الگوریتم جستجوی دودویی (binary search)
telegram.me/Learncpp/280
💡مرتب سازی حبابی (Bubble sort)
telegram.me/Learncpp/283
💡آرایه های چند بعدی
telegram.me/Learncpp/296
💡آرایه های دو بعدی
telegram.me/Learncpp/298
💡جستجوی خطی
telegram.me/Learncpp/301
💡تمارین جلسه سوم
telegram.me/Learncpp/315

📌 اتمام جلسه سوم (آرایه ها)
@Learncpp