در این مثال، مفهومی به نام محدوده محلی (Local Scope) را بررسی میکنیم. وقتی یک متغیر داخل یک تابع تعریف میشود، آن متغیر فقط در همان تابع قابل استفاده است و بیرون از تابع قابل دسترسی نیست. به این نوع متغیرها "متغیرهای محلی" میگوییم
🔔🔔🔔توضیح کد:
تعریف تابع myFunction:
داخل این تابع، یک متغیر محلی به نام x تعریف شده است که مقدار آن ۵ است:
سپس با استفاده از دستور cout << x;، مقدار این متغیر چاپ میشود.
اجرای تابع myFunction در main:
در تابع main، تابع myFunction فراخوانی میشود:
وقتی تابع اجرا میشود، مقدار متغیر x که 5 است، در خروجی نشان داده میشود.
خروجی:
چون متغیر x در محدوده محلی تابع myFunction قرار دارد، فقط در این تابع قابل استفاده است و خارج از آن تابع قابل دسترسی نیست.
بنابراین خروجی این برنامه مقدار x یعنی 5 خواهد بود.
🔴🔴🔴🔴نکته:🔴🔴🔴🔴
اگر سعی کنید خارج از تابع myFunction به متغیر x دسترسی پیدا کنید، با خطا مواجه خواهید شد، زیرا این متغیر فقط در محدوده تابع خودش تعریف شده است.
🔔🔔🔔توضیح کد:
تعریف تابع myFunction:
داخل این تابع، یک متغیر محلی به نام x تعریف شده است که مقدار آن ۵ است:
int x = 5;
سپس با استفاده از دستور cout << x;، مقدار این متغیر چاپ میشود.
اجرای تابع myFunction در main:
در تابع main، تابع myFunction فراخوانی میشود:
myFunction();
وقتی تابع اجرا میشود، مقدار متغیر x که 5 است، در خروجی نشان داده میشود.
خروجی:
چون متغیر x در محدوده محلی تابع myFunction قرار دارد، فقط در این تابع قابل استفاده است و خارج از آن تابع قابل دسترسی نیست.
بنابراین خروجی این برنامه مقدار x یعنی 5 خواهد بود.
🔴🔴🔴🔴نکته:🔴🔴🔴🔴
اگر سعی کنید خارج از تابع myFunction به متغیر x دسترسی پیدا کنید، با خطا مواجه خواهید شد، زیرا این متغیر فقط در محدوده تابع خودش تعریف شده است.
👍2
متغیری که خارج از یک تابع تعریف میشود، به عنوان متغیر سراسری (Global Variable) شناخته میشود و در هر جایی از برنامه، چه در توابع (که محدوده محلی شناخته می شوند ) و چه در محدوده سراسری برنامه قابل دسترسی می باشد.
در مثال فوق :
✅ متغیر x خارج از توابع و به صورت سراسری تعریف شده است.
✅ در هر دو تابع main و myFunction میتوان به متغیر x دسترسی داشت و مقدار آن را نمایش داد. و مقدار x در هر دو یکسان است
در مثال فوق :
✅ متغیر x خارج از توابع و به صورت سراسری تعریف شده است.
✅ در هر دو تابع main و myFunction میتوان به متغیر x دسترسی داشت و مقدار آن را نمایش داد. و مقدار x در هر دو یکسان است
👍2❤1
آموزش رایگان ++C از صفر
Photo
دوستان عزیز بی زحمت این پستو برسونید به ده تا ❤️ تا مثال هاشو آماده میکنیم
❤4
مثال تابع بازگشتی : جمع اعداد از یک تا یک عدد دلخواه
نوشتن یک تابع که جمع دو عدد دلخواه رو حساب کنه کار بسیار ساده ایه کافیه که یک تابع بنویسیم که دو تا عدد رو به عنوان پارامتر بگیره و حاصل جمع رو در قسمت return برگردونه
اما مثلا جمع اعداد از یک تا 10 کار ساده ای نیست در مثال فوق ما از برگشت استفاده کردیم تا این جمع تبدیل به دو جمع ساده بشه
در پست بعدی نشون میدیم که بازگشت در این مثال چطور اجرا می شود؟
#برنامه_نویسی
نوشتن یک تابع که جمع دو عدد دلخواه رو حساب کنه کار بسیار ساده ایه کافیه که یک تابع بنویسیم که دو تا عدد رو به عنوان پارامتر بگیره و حاصل جمع رو در قسمت return برگردونه
اما مثلا جمع اعداد از یک تا 10 کار ساده ای نیست در مثال فوق ما از برگشت استفاده کردیم تا این جمع تبدیل به دو جمع ساده بشه
در پست بعدی نشون میدیم که بازگشت در این مثال چطور اجرا می شود؟
#برنامه_نویسی
❤4👍2
آموزش شی گرایی
c++
یک زبان برنامه نویسی شی گراست. همه چیز در ++C با اشیا و کلاس در ارتباط است. مثلا در زندگی واقعی یک ماشین یک شیء است. ماشین ویژگیهایی یا attribute هایی مانند وزن و رنگ دارد و متدهایی مانند رانندگی و ترمز دارد
ویژگیها و متدها در واقع متغیرها و توابعی هستند که به کلاس تعلق دارند. این موارد اغلب به عنوان "اعضای کلاس" (Class Members) نامیده میشوند.
یک کلاس نوع دادهای است که توسط کاربر تعریف میشود و میتوانیم از آن در برنامه خود استفاده کنیم. کلاس به عنوان یک سازنده شیء یا یک "نقشه" برای ایجاد اشیاء عمل میکند
توضیح کد :
🏅 کلیدواژه class برای ایجاد کلاسی به نام MyClass استفاده میشود.
🏅کلیدواژه public یک مشخصکننده دسترسی است که تعیین میکند اعضای (ویژگیها و متدهای) کلاس از خارج از کلاس قابل دسترسی هستند. در ادامه بیشتر با مشخصکنندههای دسترسی آشنا خواهید شد.
🏅داخل کلاس، یک متغیر صحیح به نام myNum و یک متغیر رشتهای به نام myString وجود دارد. وقتی متغیرها درون یک کلاس تعریف میشوند، به آنها ویژگیها گفته میشود.
در نهایت، تعریف کلاس با یک سمیکالن ; به پایان میرسد.
c++
یک زبان برنامه نویسی شی گراست. همه چیز در ++C با اشیا و کلاس در ارتباط است. مثلا در زندگی واقعی یک ماشین یک شیء است. ماشین ویژگیهایی یا attribute هایی مانند وزن و رنگ دارد و متدهایی مانند رانندگی و ترمز دارد
ویژگیها و متدها در واقع متغیرها و توابعی هستند که به کلاس تعلق دارند. این موارد اغلب به عنوان "اعضای کلاس" (Class Members) نامیده میشوند.
یک کلاس نوع دادهای است که توسط کاربر تعریف میشود و میتوانیم از آن در برنامه خود استفاده کنیم. کلاس به عنوان یک سازنده شیء یا یک "نقشه" برای ایجاد اشیاء عمل میکند
توضیح کد :
🏅 کلیدواژه class برای ایجاد کلاسی به نام MyClass استفاده میشود.
🏅کلیدواژه public یک مشخصکننده دسترسی است که تعیین میکند اعضای (ویژگیها و متدهای) کلاس از خارج از کلاس قابل دسترسی هستند. در ادامه بیشتر با مشخصکنندههای دسترسی آشنا خواهید شد.
🏅داخل کلاس، یک متغیر صحیح به نام myNum و یک متغیر رشتهای به نام myString وجود دارد. وقتی متغیرها درون یک کلاس تعریف میشوند، به آنها ویژگیها گفته میشود.
در نهایت، تعریف کلاس با یک سمیکالن ; به پایان میرسد.
❤6
در ++C، یک شیء از یک کلاس ایجاد میشود. ما قبلاً کلاسی به نام MyClass ایجاد کردهایم، بنابراین اکنون میتوانیم از این کلاس برای ایجاد اشیاء استفاده کنیم.✅✅
🔔 برای ایجاد یک شیء از کلاس MyClass، نام کلاس را مشخص کرده و سپس نام شیء را بنویسید.
🔔 برای دسترسی به ویژگیهای کلاس (myNum و myString)، از نقطه (.) بعد از نام شیء مورد نظر استفاده کنید.
#برنامه_نویسی
🔔 برای ایجاد یک شیء از کلاس MyClass، نام کلاس را مشخص کرده و سپس نام شیء را بنویسید.
🔔 برای دسترسی به ویژگیهای کلاس (myNum و myString)، از نقطه (.) بعد از نام شیء مورد نظر استفاده کنید.
#برنامه_نویسی
❤5
متدها توابعی هستند که به کلاس تعلق دارند.📚
دو روش برای تعریف توابعی که به یک کلاس تعلق دارند وجود دارد:
🎯🎯 داخل تعریف کلاس
🎯🎯خارج از تعریف کلاس
در این مثال ، ما یک تابع را در داخل کلاس تعریف میکنیم و نام آن را "myMethod" میگذاریم.
نکته: برای دسترسی به متدها، همانطور که به ویژگیها دسترسی پیدا میکنید، عمل کنید؛ یعنی با ایجاد یک شیء از کلاس و استفاده از نقطه (.).
#سی_پلاس_پلاس
#برنامه_نویسی
دو روش برای تعریف توابعی که به یک کلاس تعلق دارند وجود دارد:
🎯🎯 داخل تعریف کلاس
🎯🎯خارج از تعریف کلاس
در این مثال ، ما یک تابع را در داخل کلاس تعریف میکنیم و نام آن را "myMethod" میگذاریم.
نکته: برای دسترسی به متدها، همانطور که به ویژگیها دسترسی پیدا میکنید، عمل کنید؛ یعنی با ایجاد یک شیء از کلاس و استفاده از نقطه (.).
#سی_پلاس_پلاس
#برنامه_نویسی
❤3
تعریف متد خارج از کلاس
برای تعریف یک متد خارج از تعریف کلاس، باید ابتدا آن را داخل کلاس اعلام کنید و سپس خارج از کلاس تعریف کنید. این کار با مشخص کردن نام کلاس، به دنبال آن عملگر تعیین محدوده :: و سپس نام متد انجام میشود:
برای تعریف یک متد خارج از تعریف کلاس، باید ابتدا آن را داخل کلاس اعلام کنید و سپس خارج از کلاس تعریف کنید. این کار با مشخص کردن نام کلاس، به دنبال آن عملگر تعیین محدوده :: و سپس نام متد انجام میشود:
class MyClass { // کلاس
public: // مشخص کننده دسترسی
void myMethod(); // اعلام تابع
};
// تعریف تابع خارج از کلاس
void MyClass::myMethod() {
cout << "Hello World!";
}
int main() {
MyClass myObj; // ایجاد یک شیء از کلاس MyClass
myObj.myMethod(); // فراخوانی تابع
return 0;
}
❤5👍1
توابع سازنده در کلاس ها
توابع سازنده نوعی متد کلاس هستند که زمانی که یک شی از کلاس ایجاد شد، به طور خودکار فراخوانی می شوند.
برای ایجاد تابع سازنده کافی است فقط نام کلاس را به همراه پرانتز استفاده کنید:
در مثال بالا ما یک تابع سازنده تعریف کردیم که مقدار
"Hello World"
را در خروجی نمایش می دهد. وقتی شی myObjectآیجاد شد مقدار بالا در خروجی نمایش داده می شود
می تونید مثال بالا رو در لینک زیر اجرا نمایید :
https://www.w3schools.com/cpp/trycpp.asp?filename=demo_constructor
توابع سازنده نوعی متد کلاس هستند که زمانی که یک شی از کلاس ایجاد شد، به طور خودکار فراخوانی می شوند.
برای ایجاد تابع سازنده کافی است فقط نام کلاس را به همراه پرانتز استفاده کنید:
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "Hello World!";
}
};
int main() {
MyClass myObj;
return 0;
}
در مثال بالا ما یک تابع سازنده تعریف کردیم که مقدار
"Hello World"
را در خروجی نمایش می دهد. وقتی شی myObjectآیجاد شد مقدار بالا در خروجی نمایش داده می شود
می تونید مثال بالا رو در لینک زیر اجرا نمایید :
https://www.w3schools.com/cpp/trycpp.asp?filename=demo_constructor
❤8
3 نکته مهم در ارتباط با سازنده ها:
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
✅نام یکسان با کلاس دارند
✅نحوه دسترسی همیشه public است
✅مقداری را برنمیگردانند یعنی return ندارند
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
✅نام یکسان با کلاس دارند
✅نحوه دسترسی همیشه public است
✅مقداری را برنمیگردانند یعنی return ندارند
❤7
مشخصکنندههای دسترسی(Access specifiers) تعیین میکنند که اعضای یک کلاس (ویژگیها و متدها) چگونه قابل دسترسی باشند. در مثال های قبل ، اعضا به صورت عمومی (public) تعریف شدهاند که به این معنی است که میتوانند از خارج کلاس دسترسی پیدا کرده و تغییر داده شوند.
اما اگر بخواهیم اعضا خصوصی (private) باشند و از دنیای بیرون مخفی بمانند چه؟
در زبان C++، سه مشخصکننده دسترسی وجود دارد:
1⃣🥇عمومی(public) : اعضا از خارج کلاس قابل دسترسی هستند.
2⃣🥈خصوصی (private) : اعضا از خارج کلاس قابل دسترسی نیستند (و یا نمیتوان آنها را مشاهده کرد).
3⃣🥉حفاظت شده(protected): اعضا فقط از طریق کلاس های فرزند(inherited)
قابل دسترسی هستند در آینده راجع به وراثت پست خواهیم گذاشت
مثال زیر تفاوت public و private را نشان می دهد:
در این مثال، publicNum از خارج کلاس قابل دسترسی است، اما تلاش برای دسترسی به privateNum باعث ایجاد خطا خواهد شد.
اما اگر بخواهیم اعضا خصوصی (private) باشند و از دنیای بیرون مخفی بمانند چه؟
در زبان C++، سه مشخصکننده دسترسی وجود دارد:
1⃣🥇عمومی(public) : اعضا از خارج کلاس قابل دسترسی هستند.
2⃣🥈خصوصی (private) : اعضا از خارج کلاس قابل دسترسی نیستند (و یا نمیتوان آنها را مشاهده کرد).
3⃣🥉حفاظت شده(protected): اعضا فقط از طریق کلاس های فرزند(inherited)
قابل دسترسی هستند در آینده راجع به وراثت پست خواهیم گذاشت
مثال زیر تفاوت public و private را نشان می دهد:
#include <iostream>
using namespace std;
class MyClass {
public:
int publicNum; // public member
private:
int privateNum; // private member
};
int main() {
MyClass myObj;
myObj.publicNum = 10; // قابل دسترسی از خارج کلاس
// myObj.privateNum = 20; // خطا: نمیتوان به عضو خصوصی دسترسی پیدا کرد
cout << "Public number: " << myObj.publicNum << endl;
return 0;
}
در این مثال، publicNum از خارج کلاس قابل دسترسی است، اما تلاش برای دسترسی به privateNum باعث ایجاد خطا خواهد شد.
❤1
نکته ⭐️⭐️⭐️⭐️
به صورت پیشفرض، اگر مشخصکننده دسترسی را تعیین نکنید، تمام اعضای کلاس خصوصی (
مانند مثال زیر که هم x و هم y خصوصی یا private هستند :
به صورت پیشفرض، اگر مشخصکننده دسترسی را تعیین نکنید، تمام اعضای کلاس خصوصی (
private
) خواهند بود. مانند مثال زیر که هم x و هم y خصوصی یا private هستند :
class MyClass {
int x; // Private
int y; // Private
};
❤1
کپسولهسازی یا Encapsulation یعنی مخفی کردن دادههای "حساس" از کاربران. برای این کار، باید متغیرهای کلاس را خصوصی (
private
) تعریف کنید تا از بیرون کلاس به آنها دسترسی نباشد. اگر میخواهید دیگران بتوانند مقدار یک متغیر خصوصی را ببینند یا تغییر دهند، میتوانید متدهای عمومی برای خواندن و تنظیم آن بسازید.❤3
برای دسترسی به یک عضو خصوصی از متدهای get و set مانند مثال زیر استفاده نمایید :
در مثال بالا ویژگی salary خصوصی می باشد که دسترسی به آن محدود است.
متد setSalary پارامتر s را دریافت کرده و به مقدار salary اختصاص می دهند.
متد getSalary مقدار مشخصه salary را بر میگرداند.
داخل تابع ()main یک شی از کلاس Employee ایجاد کردیم، با استفاده از متد setSalary مقدار salary که خصوصی است را به 5000 تغییر دادیم.
سپس از متد getSalary در cout استفاده کردیم تا مقدار آن در خروجی مشاهده کنیم
#برنامه_نویسی
#سی_پلاس_پلاس
#include <iostream>
using namespace std;
class Employee {
private:
int salary;
public:
void setSalary(int s) {
salary = s;
}
int getSalary() {
return salary;
}
};
int main() {
Employee myObj;
myObj.setSalary(50000);
cout << myObj.getSalary();
return 0;
}
در مثال بالا ویژگی salary خصوصی می باشد که دسترسی به آن محدود است.
متد setSalary پارامتر s را دریافت کرده و به مقدار salary اختصاص می دهند.
متد getSalary مقدار مشخصه salary را بر میگرداند.
داخل تابع ()main یک شی از کلاس Employee ایجاد کردیم، با استفاده از متد setSalary مقدار salary که خصوصی است را به 5000 تغییر دادیم.
سپس از متد getSalary در cout استفاده کردیم تا مقدار آن در خروجی مشاهده کنیم
#برنامه_نویسی
#سی_پلاس_پلاس
👍6
آموزش رایگان ++C از صفر
چرا Encapsulation مهم است؟
دوستان عزیزم این پستو بی زحمت به ده تا قلب برسونید میخوام مباحث وراثت هم تقدیم نگاهتون کنم🌷🌷🌷
❤4
آموزش وراثت (Inheritence)
در ++C ، میتوان ویژگیها و متدها را از یک کلاس به کلاس دیگر به ارث برد. مفهوم "ارثبری" به دو دسته تقسیم میشود:
🏅 کلاس مشتقشده (فرزند) 👶- کلاسی که از کلاس دیگری ارث میبرد.
🏅 کلاس پایه (والد)👨👩👦 - کلاسی که از آن ارثبری میشود.
برای ارثبری از یک کلاس، از نماد : استفاده کنید.
در مثال زیر، کلاس Car (فرزند) ویژگیها و متدهای کلاس Vehicle (والد) را به ارث میبرد:
در ++C ، میتوان ویژگیها و متدها را از یک کلاس به کلاس دیگر به ارث برد. مفهوم "ارثبری" به دو دسته تقسیم میشود:
🏅 کلاس مشتقشده (فرزند) 👶- کلاسی که از کلاس دیگری ارث میبرد.
🏅 کلاس پایه (والد)👨👩👦 - کلاسی که از آن ارثبری میشود.
برای ارثبری از یک کلاس، از نماد : استفاده کنید.
در مثال زیر، کلاس Car (فرزند) ویژگیها و متدهای کلاس Vehicle (والد) را به ارث میبرد:
#include <iostream>
#include <string>
using namespace std;
// Base class
class Vehicle {
public:
string brand = "Ford";
void honk() {
cout << "Tuut, tuut! \n" ;
}
};
// Derived class
class Car: public Vehicle {
public:
string model = "Mustang";
};
int main() {
Car myCar;
myCar.honk();
cout << myCar.brand + " " + myCar.model;
return 0;
}
❤9
پولی مورفیسم (Polymorphism) به معنای "چند شکل" است و زمانی رخ میدهد که چند کلاس با استفاده از وراثت با هم ارتباط والد فرزندی دارند.
همانطور که در پست های قبل گفتیم؛ وراثت به ما امکان میدهد که ویژگیها و متدها را از یک کلاس دیگر به ارث ببریم.
پولی مورفیسم از این متدها استفاده میکند تا کارهای مختلفی انجام دهد. این ویژگی به ما اجازه میدهد تا یک کار را به روشهای مختلف انجام دهیم.
برای مثال، یک کلاس پایه به نام Animal را در نظر بگیرید که متدی به نام animalSound() دارد. کلاسهای مشتقشده مثل Pig، Cat، Dog و Bird میتوانند نسخههای مخصوص خود از این متد را داشته باشند (مثل اینکه صدای خوک خرخر هست و گربه میومیو و غیره):
همانطور که در پست های قبل گفتیم؛ وراثت به ما امکان میدهد که ویژگیها و متدها را از یک کلاس دیگر به ارث ببریم.
پولی مورفیسم از این متدها استفاده میکند تا کارهای مختلفی انجام دهد. این ویژگی به ما اجازه میدهد تا یک کار را به روشهای مختلف انجام دهیم.
برای مثال، یک کلاس پایه به نام Animal را در نظر بگیرید که متدی به نام animalSound() دارد. کلاسهای مشتقشده مثل Pig، Cat، Dog و Bird میتوانند نسخههای مخصوص خود از این متد را داشته باشند (مثل اینکه صدای خوک خرخر هست و گربه میومیو و غیره):
//کلاس والد
class Animal {
public:
void animalSound() {
cout << "The animal makes a sound \n";
}
};
// کلاس فرزند1
class Pig : public Animal {
public:
void animalSound() {
cout << "The pig says: wee wee \n";
}
};
// کلاس فرزند2
class Dog : public Animal {
public:
void animalSound() {
cout << "The dog says: bow wow \n";
}
};
❤7