چرا دانستن آدرس حافظه متغیرها مفید هست؟
قابلیت های pointer و reference در ++C این امکان را به ما می دهند که داده ها را در حافظه مدیریت کرده و باعث افزایش کارایی برنامه شود
این دو قابلیت ++C را از سایر زبان های برنامه نویسی مثل Python و Java متمایز می کند
در پست های بعدی pointer را توضیح خواهیم داد
#سی_پلاس_پلاس
قابلیت های pointer و reference در ++C این امکان را به ما می دهند که داده ها را در حافظه مدیریت کرده و باعث افزایش کارایی برنامه شود
این دو قابلیت ++C را از سایر زبان های برنامه نویسی مثل Python و Java متمایز می کند
در پست های بعدی pointer را توضیح خواهیم داد
#سی_پلاس_پلاس
👍3❤2❤🔥1🔥1
آموزش Pointer ها💡💡
در پست های قبلی یاد گرفتید که میتوانیم با استفاده از عملگر & به آدرس حافظه یک متغیر دسترسی پیدا کنیم.
اما Pointer یک متغیر است که آدرس حافظه متغیر دیگری را در خود به عنوان مقدار ذخیره میکند.
یک متغیر pointer به یک نوع داده (مثل int یا string) از همان نوع اشاره میکند و با عملگر * ساخته میشود. آدرس متغیری که با آن کار میکنید به pointer اختصاص داده میشود:
در مثال زیر ما یک متغیر رشته ای به نام food درست کردیم و میخواهیم مقدار آدرس حافظه آن را در متغیر دیگر ذخیره کنیم :
برای این منظور یک pointer از نوع رشته به نام ptr تعریف کرده و آدرس حافظه متغیر food را به آن اختصاص می دهیم:
پس از خروجی گرفتن از food، food& و ptr متوجه خواهیم شد که مقدار food& و ptr یکسان خواهند بود چون هردو آدرس متغیر food در حافظه را نمایش می دهند.
کد کامل
در پست های قبلی یاد گرفتید که میتوانیم با استفاده از عملگر & به آدرس حافظه یک متغیر دسترسی پیدا کنیم.
اما Pointer یک متغیر است که آدرس حافظه متغیر دیگری را در خود به عنوان مقدار ذخیره میکند.
یک متغیر pointer به یک نوع داده (مثل int یا string) از همان نوع اشاره میکند و با عملگر * ساخته میشود. آدرس متغیری که با آن کار میکنید به pointer اختصاص داده میشود:
در مثال زیر ما یک متغیر رشته ای به نام food درست کردیم و میخواهیم مقدار آدرس حافظه آن را در متغیر دیگر ذخیره کنیم :
string food = "Pizza";
برای این منظور یک pointer از نوع رشته به نام ptr تعریف کرده و آدرس حافظه متغیر food را به آن اختصاص می دهیم:
string* ptr = &food;
پس از خروجی گرفتن از food، food& و ptr متوجه خواهیم شد که مقدار food& و ptr یکسان خواهند بود چون هردو آدرس متغیر food در حافظه را نمایش می دهند.
cout << food << "\n";
cout << &food << "\n";
cout << ptr << "\n";
کد کامل
#include <iostream>
#include <string>
using namespace std;
int main() {
string food = "Pizza"; // A string variable
string* ptr = &food; // A pointer variable that stores the address of food
// Output the value of food
cout << food << "\n";
// Output the memory address of food
cout << &food << "\n";
// Output the memory address of food with the pointer
cout << ptr << "\n";
return 0;
}
❤11👍1
نکته درباره pointer ها
سه روش برای اعلان متغیرهای pointer وجود دارد، اما روش اول توصیه میشود:
سه روش برای اعلان متغیرهای pointer وجود دارد، اما روش اول توصیه میشود:
string* mystring; // روش توصیهشده
string *mystring;
string * mystring;
❤9❤🔥1
آموزش رایگان ++C از صفر
آموزش Pointer ها💡💡 در پست های قبلی یاد گرفتید که میتوانیم با استفاده از عملگر & به آدرس حافظه یک متغیر دسترسی پیدا کنیم. اما Pointer یک متغیر است که آدرس حافظه متغیر دیگری را در خود به عنوان مقدار ذخیره میکند. یک متغیر pointer به یک نوع داده (مثل int…
دوستان عزیز این پستو برسونید به ۱۰ تا قلب میخواهیم ازpointer ها کوییز بذاریم براتون که خودتونو محک بزنید مباحثو چقدر یاد گرفتید😊😊
🌷
🌷
👍7
یک متغیر pointer چه کاری می کند؟
Anonymous Quiz
16%
ذخیره مقدار یک متغیر
71%
ذخیره آدرس حافظه یک متغیر
7%
نوع داده یک متغیر
6%
اندازه متغیر بر حسب بایت
❤3❤🔥1🤗1
🔴🔴🔴🔴مدیریت استثناها (Exceptions)
در++C
موقع اجرای کدهای ++C ممکنست به خطاهای مختلفی برخورد کنید مانند :
خطاهای کدنویسی توسط برنامهنویس، خطاهای ناشی از ورودی نادرست، یا سایر اتفاقات غیر قابل پیش بینی دیگر
زمانی که به این خطاها یا استثناها بر میخوریم برنامه ++C ما متوقف شده و پیام خطا را نمایش می دهد
واژه فنی این وضعیت پرتاب کردن استثنا ( throw exception)
می باشد
در++C
موقع اجرای کدهای ++C ممکنست به خطاهای مختلفی برخورد کنید مانند :
خطاهای کدنویسی توسط برنامهنویس، خطاهای ناشی از ورودی نادرست، یا سایر اتفاقات غیر قابل پیش بینی دیگر
زمانی که به این خطاها یا استثناها بر میخوریم برنامه ++C ما متوقف شده و پیام خطا را نمایش می دهد
واژه فنی این وضعیت پرتاب کردن استثنا ( throw exception)
می باشد
❤7
مدیریت استثنا در ++C با سه کلمه کلیدی زیر
try, throw,catch
انجام می شود که فرمت آن برای تعریف در کد به صورت زیر است :
🍁عبارت try به شما این امکان را می دهد که بخشی از کد که داخل آن قرار دارد برای خطا آزمایش شود
🍁دستور throw زمانی که کد داخل try خطا داشته باشد، یک استثنا اصطلاحا پرتاب می کندکه باعث می شود برنامه از کار نیفتد
🍁در بلاک catch دستوری نوشته می شود که فقط موقع بروز خطا در کد try اجرا می شود مثلا یک نوشته به کاربر در خروجی نشان می دهد که خطا رخ داده است.
در ادامه یک برنامه مثال خواهیم زد که کاربردشو بهتر درک کنید.
try, throw,catch
انجام می شود که فرمت آن برای تعریف در کد به صورت زیر است :
try {
throw exception;
}
catch () {
}
🍁عبارت try به شما این امکان را می دهد که بخشی از کد که داخل آن قرار دارد برای خطا آزمایش شود
🍁دستور throw زمانی که کد داخل try خطا داشته باشد، یک استثنا اصطلاحا پرتاب می کندکه باعث می شود برنامه از کار نیفتد
🍁در بلاک catch دستوری نوشته می شود که فقط موقع بروز خطا در کد try اجرا می شود مثلا یک نوشته به کاربر در خروجی نشان می دهد که خطا رخ داده است.
در ادامه یک برنامه مثال خواهیم زد که کاربردشو بهتر درک کنید.
❤7
توضیح مثال : در این مثال ما از بلاک try catch در صورت صحیح نبودن شرط استفاده کردیم :
بلاک try ما ابتدا یک متغیر عدد صحیح به نام age تغریف کردیم که مقدارش 15 هستش،
بعد یک شرط if تعریف کردیم که اگر مقدار age بزرگتر یا مساوی 18 باشد، متن زیر در خروجی نشان داده شود :
"
سن شما بالای هجده سال است پس حق دسترسی دارید
"
و اگر مقدار age کمتر از 18 باشه، برای متغیر age اکسپشن پرتاب می کند.
حالا باید در بلاک catch باید دستوری که موقع پرتاب استثنا می خواهیم اجرا شود را بنویسیم ( در اینجا استثنا زمانی پرتاب می شود که مقدار int از 18 کمتر باشد طبق دستور شرط بالا، پس کد داخل catch هم وقتی که مقدار age از 18 کمتر باشد اجرا خواهد که)
این دستور به کاربر پیام زیر را به همراه مقدار سن نشان می دهد
در این مثال چون age مقدارش 15 هست پس استثنا پرتاب شده و کد داخل بلاک catch اجرا خواهد شد.
بلاک try ما ابتدا یک متغیر عدد صحیح به نام age تغریف کردیم که مقدارش 15 هستش،
try {
int age = 15;
بعد یک شرط if تعریف کردیم که اگر مقدار age بزرگتر یا مساوی 18 باشد، متن زیر در خروجی نشان داده شود :
"
سن شما بالای هجده سال است پس حق دسترسی دارید
"
و اگر مقدار age کمتر از 18 باشه، برای متغیر age اکسپشن پرتاب می کند.
if (age >= 18) {
cout << "سن شما بالای هجده سال است پس حق دسترسی دارید";
} else {
throw (age);
}
}
حالا باید در بلاک catch باید دستوری که موقع پرتاب استثنا می خواهیم اجرا شود را بنویسیم ( در اینجا استثنا زمانی پرتاب می شود که مقدار int از 18 کمتر باشد طبق دستور شرط بالا، پس کد داخل catch هم وقتی که مقدار age از 18 کمتر باشد اجرا خواهد که)
این دستور به کاربر پیام زیر را به همراه مقدار سن نشان می دهد
catch (int myNum) {
cout << "چون سن شما زیر هیجده ساله حق دسترسی ندارید";
cout << "سن شما : " << myNum;
}
در این مثال چون age مقدارش 15 هست پس استثنا پرتاب شده و کد داخل بلاک catch اجرا خواهد شد.
❤4
سورس کد سیستم مدیریت حساب بانکی به سبک کاملا شی گرا در ++C
#include <iostream>
using namespace std;
class BankAccount {
private:
string accountNumber;
string holderName;
double balance;
public:
BankAccount(string accNum, string name, double bal = 0.0)
: accountNumber(accNum), holderName(name), balance(bal) {}
void deposit(double amount) {
balance += amount;
cout << "Meghdare varizi " << amount << ". Mojudi" << balance << endl;
}
void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
cout << "bardasht " << amount << ". mojudi: " << balance << endl;
} else {
cout << "Insufficient funds." << endl;
}
}
};
int main() {
BankAccount account("123456789", "Ali Ahmadi");
account.deposit(1000);
account.withdraw(200);
return 0;
}
❤15🥰1😍1
آموزش رایگان ++C از صفر
سورس کد سیستم مدیریت حساب بانکی به سبک کاملا شی گرا در ++C #include <iostream> using namespace std; class BankAccount { private: string accountNumber; string holderName; double balance; public: BankAccount(string accNum, string name, double…
برسه ده تا ری اکشن پی دی اف توضیحشم تقدیمتون میکنم
❤14❤🔥2
آموزش رایگان ++C از صفر
پی_دی_اف_توضیح_کلاس_سیستم_حساب_بانکی_20241109_175326_0000.pdf
ده تا ری اکشن هم یادتون نره دوستان عزیز🌷🌷🌷❤️❤️❤️❤️
❤8❤🔥2
یکی از دوستان عزیز زیر یکی از پستا کامنت گذاشتن و اشاره کردن که چرا کدی که زدم return 0 نداره که نکته خیلی خوبی رو اشاره کردن
❗️❗️❗️در++C مدرن ( نسخه ۱۱ به بعد) نیازی نیس که 0 return رو حتما در انتهای تابع ()mainاضافه کنید ❗️❗️❗️❗️
❗️نسخه 11 سال 2011 عرضه شد
❗️چون کامپایلر خودکار براتون اضافه می کنه
با این حال نوشتنش برای افزایش خوانایی کد به مبتدیان توصیه میشه
❗️❗️❗️در++C مدرن ( نسخه ۱۱ به بعد) نیازی نیس که 0 return رو حتما در انتهای تابع ()mainاضافه کنید ❗️❗️❗️❗️
❗️نسخه 11 سال 2011 عرضه شد
❗️چون کامپایلر خودکار براتون اضافه می کنه
با این حال نوشتنش برای افزایش خوانایی کد به مبتدیان توصیه میشه
👍6❤3
آموزش رایگان ++C
👇👇👇👇👇👇
@cppw3schools
3⃣دلیل مهم یادگیری ++C
🟢پایهای قوی در مفاهیم اصلی برنامهنویسی
++C یک زبان سطح پایین است که مفاهیم اساسی مانند مدیریت حافظه، اشارهگرها و ساختار دادهها را معرفی میکند. یادگیری این زبان درک عمیقی از نحوه کار کامپیوترها به شما میدهد که در یادگیری زبانهای دیگر مفید خواهد بود.
🟢کارایی و سرعت بالا
++C به دلیل سرعت و عملکرد بالا شناخته شده است. این زبان به طور گسترده در صنایعی مانند توسعه بازی، امور مالی و برنامهنویسی سیستمها استفاده میشود. یادگیری آن شما را برای ساخت برنامههای با کارایی بالا آماده میکند.
🟢مهارتهای قابل انتقال
یادگیری ++C پایهای قوی در برنامهنویسی شیءگرا (OOP) و طراحی الگوریتمها ایجاد میکند که در بسیاری از زبانهای مدرن مانند پایتون، جاوا و سیشارپ استفاده میشوند. با تسلط بر ++C، یادگیری زبانهای دیگر آسانتر خواهد شد.
👇👇👇👇👇👇
@cppw3schools
3⃣دلیل مهم یادگیری ++C
🟢پایهای قوی در مفاهیم اصلی برنامهنویسی
++C یک زبان سطح پایین است که مفاهیم اساسی مانند مدیریت حافظه، اشارهگرها و ساختار دادهها را معرفی میکند. یادگیری این زبان درک عمیقی از نحوه کار کامپیوترها به شما میدهد که در یادگیری زبانهای دیگر مفید خواهد بود.
🟢کارایی و سرعت بالا
++C به دلیل سرعت و عملکرد بالا شناخته شده است. این زبان به طور گسترده در صنایعی مانند توسعه بازی، امور مالی و برنامهنویسی سیستمها استفاده میشود. یادگیری آن شما را برای ساخت برنامههای با کارایی بالا آماده میکند.
🟢مهارتهای قابل انتقال
یادگیری ++C پایهای قوی در برنامهنویسی شیءگرا (OOP) و طراحی الگوریتمها ایجاد میکند که در بسیاری از زبانهای مدرن مانند پایتون، جاوا و سیشارپ استفاده میشوند. با تسلط بر ++C، یادگیری زبانهای دیگر آسانتر خواهد شد.
❤3👍3
Calculator.cpp
3 KB
👍4❤1
مهمترین کتابخانه های ++C شماره ۱
کتابخانه <iostream> برای عملیات ورودی و خروجی در زبان C++ استفاده میشود. این کتابخانه امکان خواندن دادهها از ورودی استاندارد (کیبورد) و نوشتن دادهها به خروجی استاندارد (کنسول) را فراهم میکند.
اجزای کلیدی:
✅std::cin: ورودی را از کاربر میخواند
✅std::cout: دادهها را به کنسول نمایش میدهد.
✅std::cerr: پیامهای خطا را به کنسول نمایش میدهد.
آموزش رایگان ++C
@cppw3schools
#برنامه_نویسی
کتابخانه <iostream> برای عملیات ورودی و خروجی در زبان C++ استفاده میشود. این کتابخانه امکان خواندن دادهها از ورودی استاندارد (کیبورد) و نوشتن دادهها به خروجی استاندارد (کنسول) را فراهم میکند.
اجزای کلیدی:
✅std::cin: ورودی را از کاربر میخواند
✅std::cout: دادهها را به کنسول نمایش میدهد.
✅std::cerr: پیامهای خطا را به کنسول نمایش میدهد.
cout << "Enter the file URL: "; // پیام راهنما را به کنسول نمایش میدهد
cin >> url; // ورودی کاربر را میخواند و در متغیر url ذخیره میکند
آموزش رایگان ++C
@cppw3schools
#برنامه_نویسی
❤8
مهمترین کتابخانه های ++C شماره ۲
کتابخانه <fstream> برای مدیریت فایلها استفاده میشود. این کتابخانه امکان خواندن از فایل و نوشتن در فایلها را فراهم میکند.
اجزای اصلی:
✅ std::ifstream: دادهها را از یک فایل میخواند.
✅ std::ofstream: دادهها را در یک فایل مینویسد.
✅ std::fstream: امکان خواندن و نوشتن هر دو را فراهم میکند.
کتابخانه <fstream> برای مدیریت فایلها استفاده میشود. این کتابخانه امکان خواندن از فایل و نوشتن در فایلها را فراهم میکند.
اجزای اصلی:
✅ std::ifstream: دادهها را از یک فایل میخواند.
✅ std::ofstream: دادهها را در یک فایل مینویسد.
✅ std::fstream: امکان خواندن و نوشتن هر دو را فراهم میکند.
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ofstream file("example.txt");
file << "سلام دنیا!";
file.close();
ifstream input("example.txt");
string content;
getline(input, content);
cout << content << endl;
input.close();
return 0;
}
❤9
مهم ترین کتابخانه های ++C شماره 3
<vector>
کتابخانه <vector> بخشی از کتابخانه (STL) است. این کتابخانه یک آرایه داینامیک(اندازه غیر ثابت) فراهم میکند که میتواند به صورت خودکار اندازه خود را بزرگ یا کوچک کند. برخلاف array که اندازه اش پس از ایجاد غیر قابل تغییر است.
ویژگیهای اصلی:
✅ اندازه آن به صورت خودکار تغییر میکند (بزرگ یا کوچک میشود).
✅ دادهها را در حافظه پیوسته ذخیره میکند که دسترسی به آنها را سریعتر میکند.
✅ از عملیات پیمایش و تغییر مانند اضافه کردن یا حذف عناصر پشتیبانی میکند.
در این مثال متد push_back در این کتابخانه به انتهای vector عنصر اضافه می کند.
#برنامه_نویسی
<vector>
کتابخانه <vector> بخشی از کتابخانه (STL) است. این کتابخانه یک آرایه داینامیک(اندازه غیر ثابت) فراهم میکند که میتواند به صورت خودکار اندازه خود را بزرگ یا کوچک کند. برخلاف array که اندازه اش پس از ایجاد غیر قابل تغییر است.
ویژگیهای اصلی:
✅ اندازه آن به صورت خودکار تغییر میکند (بزرگ یا کوچک میشود).
✅ دادهها را در حافظه پیوسته ذخیره میکند که دسترسی به آنها را سریعتر میکند.
✅ از عملیات پیمایش و تغییر مانند اضافه کردن یا حذف عناصر پشتیبانی میکند.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers;
numbers.push_back(10);
numbers.push_back(20);
numbers.push_back(30);
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
در این مثال متد push_back در این کتابخانه به انتهای vector عنصر اضافه می کند.
#برنامه_نویسی
❤5
مفهوم Pass By Value در ++C
✅تعریف این مفهوم : یک کپی از متغیر داخل حافظه ایجاد می شود و به عنوان آرگومان تابع داده می شود
✅نحوه عملکرد : تابع فقط روی مقدار کپی تغییرات را انجام می دهد ، و مقدار اصلی بدون تغییر می ماند
✅کاربرد: اگر قصد تغییر مقدار متغیر اصلی را ندارید ، و یا مقدار متغیر کوچک است مانند int و یا char
مثال :
در مثال بالا وقتی از x خروجی بگیریم مقدارش 11 و وقتی از num حتی بعد اجرای تابع خروجی بگیزیم مقدار 10 باقی می ماند.
✅تعریف این مفهوم : یک کپی از متغیر داخل حافظه ایجاد می شود و به عنوان آرگومان تابع داده می شود
✅نحوه عملکرد : تابع فقط روی مقدار کپی تغییرات را انجام می دهد ، و مقدار اصلی بدون تغییر می ماند
✅کاربرد: اگر قصد تغییر مقدار متغیر اصلی را ندارید ، و یا مقدار متغیر کوچک است مانند int و یا char
مثال :
#include <iostream>
using namespace std;
void incrementByValue(int x) {
x = x + 1;
cout << "Inside function: " << x << endl;
}
int main() {
int num = 10;
incrementByValue(num);
cout << "Outside function: " << num << endl;
return 0;
}
در مثال بالا وقتی از x خروجی بگیریم مقدارش 11 و وقتی از num حتی بعد اجرای تابع خروجی بگیزیم مقدار 10 باقی می ماند.
Inside function: 11
Outside function: 10
❤3👍2
مفهوم Pass By Reference در ++C
✅ تعریف : به جای کپی مقدار متغیر اصلی به عنوان آرگومان تابع به تابع داده می شود که به صورت ارجاع به متغیر تعریف می شود
✅ عملکرد: چون تابع به آدرس حافظه متغیر دسترسی دارد، پس می تواند مقدار متغیر اصلی را تغییر دهد.
✅ کاربرد: زمانی از این روش استفاده کنید که لازم است مقدار متغیر اصلی را تغییر دهید و مقدار متغیر اصلی بزرگ است و اگر در مموری کپی شود حجم زیادی میگیرد ( ساختار داده هایی نظیر آرایه ،وکتور و ..)
مثال :
در مثال فوق چون از علامت & استفاده کردیم قبل از آرگومان تابع بنابراین مقدار اصلی متغیر تغییر می کند و بعد ازاجرای تابع مقدار متغیر از ۱۰ به ۱۱ تبدیل می شود
✅ تعریف : به جای کپی مقدار متغیر اصلی به عنوان آرگومان تابع به تابع داده می شود که به صورت ارجاع به متغیر تعریف می شود
✅ عملکرد: چون تابع به آدرس حافظه متغیر دسترسی دارد، پس می تواند مقدار متغیر اصلی را تغییر دهد.
✅ کاربرد: زمانی از این روش استفاده کنید که لازم است مقدار متغیر اصلی را تغییر دهید و مقدار متغیر اصلی بزرگ است و اگر در مموری کپی شود حجم زیادی میگیرد ( ساختار داده هایی نظیر آرایه ،وکتور و ..)
مثال :
#include <iostream>
using namespace std;
void incrementByReference(int& x) {
x = x + 1;
cout << "Inside function: " << x << endl;
}
int main() {
int num = 10;
incrementByReference(num);
cout << "Outside function: " << num << endl;
return 0;
}
در مثال فوق چون از علامت & استفاده کردیم قبل از آرگومان تابع بنابراین مقدار اصلی متغیر تغییر می کند و بعد ازاجرای تابع مقدار متغیر از ۱۰ به ۱۱ تبدیل می شود
Inside function: 11
Outside function: 11
❤5👍2