۱۷ مطلب با موضوع «++c» ثبت شده است

توابع دوست کلاس در برنامه نویسی

قبلا یادآوری شد که اعضای یک کلاس اعم از داده ها یا توابع دارای 3 نوع سطح دسترسی می باشند که شامل دسترسی خصوصی private و دسترسی عمومی public و دسترسی حفاظت شده protected است .

اگر داده ها و توابع عضو یک کلاس از نوع private تعریف شوند فقط داده ها و توابع درونی آن کلاس در داخل همان کلاس می توانند به آنها دسترسی داشته باشند و هیچ جزء دیگری در بیرون از کلاس حتی شی ساخته شده از همان کلاس هم اجازه و توانایی دسترسی و کار با آنها را ندارند مگر تابعی را تعریف نماییم که در اصطلاح دوست(Friend) کلاس مورد بحث باشد .

آموزش تابع و توابع دوست کلاس در برنامه نویسی C++ پس تابع دوست یک کلاس، تابع ویژه ای است که می تواند به تمامی اعضای کلاس حتی اعضای private نیز دسترسی داشته باشد. تفاوتی نمی کند که تابع دوست کلاس را عمومی یا خصوصی تعریف نماییم. یک تابع دوست کلاس طبق الگوی زیر تعریف می شود که باید از کلمه کلیدی friend در ابتدای آن استفاده نمود :

friend type FunctionName(Parameters List...)
{
    Function Body...
}

آموزش تابع دوست کلاس و کلاس دوست کلاس و تعریف آنها در برنامه نویسی C++ مثال) به اتفاق یکدیگر مثالی ابتدایی از تعریف تابع دوست کلاس و نحوه بکارگیری آن در کلاس را بررسی می نماییم :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

class Accumulator
{
private:
    int m_nValue;
public:
    Accumulator() { m_nValue = 0; }
    void Add(int nValue) { m_nValue += nValue; }
 
    // Make the Reset() function a friend of this class
    friend void Reset(Accumulator &cAccumulator);
};
 
// Reset() is now a friend of the Accumulator class
void Reset(Accumulator &cAccumulator)
{
    // And can access the private data of Accumulator objects
    cAccumulator.m_nValue = 0;
}

۰ نظر موافقین ۲ مخالفین ۰

مشکل کار با String یا رشته ها در برنامه Borland C++ و رفع این مورد با جهش به برنامه ++c

همانطور که در ابتدای مجموعه آموزش برنامه نویسی C++ خدمت شما عزیزان عرض شد ما برنامه های خود را در محیط نرم افزار Borland C++ آموزش دادیم. متاسفانه این نسخه از کامپایلر C++ رشته ها را پشتیبانی نمی کند و برای کار با رشته ها مثل اسامی، جملات و ... ما مجبور به نوشتن کدهای فراوانی خواهیم بود و بدلیل اینکه از این به بعد مطالب سنگین تر و مفهومی خواهد شد لذا تصمیم گرفتم که این مشکل را با استفاده از تابع کتابخانه ای std که در دیگر نسخه های C++ پشتیبانی می شود را رفع نمایم .

در اینجا من 2 مثال را مورد بررسی قرار می دهم تا عزیزان بتوانند در مواردی که نمی توانند از کتابخانه std استفاده کنند از آرایه ای از کاراکترها برای دسترسی و کار با رشته ها و برنامه نویسی در محیط Borland C++ استفاده نمایند .

آموزش رشته ها و آرایه های کاراکتری با استفاده از کتابخانه std و بدون آن در برنامه نویسی C++ مثال1) کار با رشته ها بدون استفاده از فایل سرآیند یا کتابخانه std، به کمک آرایه ای از کاراکترها در برنامه نویسی C++ :


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

#include <iostream.h>
#include <conio.h>

class Employee
{
  public:
  	char m_strName[25];
	int m_nID;
	double m_dWage;
	
	void SetInfo(char *strName, int nID, double dWage)
	{
            strncpy(m_strName, strName, 25);
	    m_nID = nID;
	    m_dWage = dWage;
	}
	
	void Print()
	{
            cout << "Name: " ;
            for(int i=0;m_strName[i];i++)
            {
		cout << m_strName[i];
            }
            cout << "  Id: " << m_nID << "  Wage: $" << m_dWage << endl;
	}
};

int main()
{
    Employee cAlex;
    cAlex.SetInfo("Alex", 1, 25.00);

    Employee cJoe;
    cJoe.SetInfo("Joe", 2, 22.25);
	
    cAlex.Print();
    cJoe.Print();
    getch();
    return 0;
}
Name: Alex  Id: 1  Wage: $25.00
Name: Joe   Id: 2  Wage: $2.25

آموزش رشته ها و آرایه های کاراکتری با استفاده از کتابخانه std و بدون آن در برنامه نویسی C++ مثال2) کار با رشته ها با استفاده از فایل سرآیند یا کتابخانه std، برای راحتی و سهولت در برنامه نویسی C++ :

۰ نظر موافقین ۰ مخالفین ۰

کلاس ها (Classes) و اشیا (Objects) در برنامه نویسی ++c

اکنون وقت آن است که برنامه نویسی شی گرا را در عمل یاد گرفته و با اصول تعریف و بکارگیری آن بیشتر آشنا بشویم .

  • کلاس ها (Classes) :

کلاس ها همان نوع داده تجریدی یا انتزاعی (Abstract) هستند. به عبارتی یک نوع داده هستند که توسط برنامه نویس برای کار با داده ها و توابع و رویدادهای مختلفی تعریف می شوند. برای تعریف کلاس از الگوی زیر پیروی می کنیم :


1
2
3
4
5
6
7
8
9
10

class className
{
    // Define private variables & functions
    public:
        // Define public variables & functions
    private:
        // Define private variables & functions
    protected:
        // Define protected variables & functions
} objectsame;   // Declare Objects

همانطور که در بالا آمد، برای تعریف یک کلاس از کلمه کلیدی class استفاده می کنیم و نامی را در ادامه برای آن تعیین می کنیم .

متغیرها و توابع مربوط به class در درون بلوک آکولاد قرار خواهند گرفت. فرض بر این است که دسترسی داده ها و توابع private است مگر اینکه نوع دسترسی صراحتا اعلام شود .

۰ نظر موافقین ۰ مخالفین ۰

مفاهیم شی گرایی در برنامه نویسی ++c

ما در ابتدای مطالب کلی در مورد C++ صحبت کردیم و گفتیم که بد ترکونده، نه برای اینکه 1 در صد از این زبان را بنده شاید بلد باشم. بلکه برای اینکه این جز حقیقت چیزی نیست .

تنها اختلاف بین زبان C و C++ مبحثی است بنام شی گرایی یا OOP(Object Oriented Programming) که همین مورد کافی است که دنیای نرم افزار شاهد تحول عظیمی در طراحی و پیاده سازی نزم افزارهای کنونی باشد .

بد نیست بدانید که اندیشه شی گرایی در زبان C++ آنقدر قوی است که به جرئت می توان گفت تمامی نرم افزارهای موجود مدیون این دید از برنامه نویسی هستند. اکثر سیستم عامل های رایج مانند Linux, Macintosh, ... بر گرفته از تفکر C++ هستند و Windows را صرفا با C++ و مبانی C نوشته اند .

نرم افزار های غولی مانند Office, Photoshop, Nero, ... را با این زبان طراحی و پیاده سازی کرده اند .

۰ نظر موافقین ۰ مخالفین ۰

آموزش اشاره گر ها

دوستان عزیز دقت داشته باشند که داریم کم کم از درب ورودی برنامه نویسی رد می شیم .

شاید پیش خودتون بگویید که پس مطالب قبلی چی بودند؟ باید عرض کنم که می شود گفت که اونا الفبای ابتدایی برنامه نویسی بودند. از این به بعد کم کم با مفاهیم اساسی برنامه نویسی روبرو خواهیم شد که درک هر چه بهتر این مفاهیم می تواند ما را در زمینه برنامه نویسی C++ یا هر برنامه نویسی استاندارد دیگری به برتری برساند. اصول و مفاهیم کلی برنامه نویسی یکیه اما در زبانهای مختلف، راهها و قوانین نگارشی متفاوتی برای پیاده سازی کدها وجود دارد .

از این به بعد باید مفاهیمی را درک کنیم که در برنامه نویسی نقش بسزایی را ایفا می کنند، پس سعی کنید که مطالب را با دقت پیگیری کرده و به مثال ها و نوشتن برنامه بپردازید تا که به این مفاهیم تسلط پیدا نمایید .

تعریف مفاهیم

آموزش برنامه نویسی، اشاره گرها، آرایه ها، پارامترهای تابع و توابع اشاره گر : متغیری است که آدرس خانه های سیستم را در خود نگه می دارد (آدرس هر متغیر در حافظه اشاره گر است) .

متغیر هایی را که تا کنون با هم تعریف کردیم جدای از نوعشان همگی در خانه های حافظه ذخیره می شوند و هر کدام با توجه به طول نوع تعدادی از خانه ها را در حافظه اشغال می کنند .

آموزش برنامه نویسی، اشاره گرها، آرایه ها، پارامترهای تابع و توابع آدرس خانه های حافظه : حافظه کامپیوتر از مجموعه ای از بایتهایی که هر کدام شامل 8 بیت هستند تشکیل شده است. برای دسترسی به هر یک از این بایتها که به آنها خانه های حافظه گفته می شود شماره آدرسی وجود دارد که به ترتیب به هر یک داده می شود. به این شماره ردیف ها آدرس خانه حافظه گفته می شود .

آموزش برنامه نویسی، اشاره گرها، آرایه ها، پارامترهای تابع و توابع آدرس متغیر : آدرس اولین بایت از حافظه که به یک متغیر اختصاص می یابد آدرس آن متغیر نامیده می شود .

می دانیم که متغیر ها در حافظه ذخیره می شوند اما مقدار حافظه مورد نیازشان با یکدیگر متفاوت است :

  • char : 1 Byte
  • int : 2-4 Byte
  • float : 4 Byte
  • double : 8 Byte

مثلا اگر ما متغیری از نوع int را تعریف کنیم 2 یا 4 بایت را اشغال می کند و به این معنی است که تعداد 4 تا 8 خانه پشت سر هم از حافظه را اشغال می کند که آدرس آن اولین آدرس خانه حافظه در نظر گرفته خواهد شد .

در مورد مزایای استفاده از اشاره گرها در C++ یا زبانهای برنامه نویسی دیگر همین قدر باید بگم که چیز خوبیه و سرعت، کارایی، دسترسی و ... را بالا می برد .

۰ نظر موافقین ۰ مخالفین ۰

رشته ها (Strings)

ما در فصول قبل با آرایه ها آشنا شدیم. در برنامه نویسی C++ نوع خاصی برای رشته ها یا همان String وجود ندارد و در این مورد باید از آرایه ای از کاراکترها استفاده کنیم. البته در Visual C++ میشه از فضای نامی std در مورد رشته ها استفاده کرد که کار را راحتتر می کند اما چون ما در Borland برنامه نویسی می کنیم نمی توانیم مستقیما با یک متغیر از نوع string کار کنیم .

قبلا یادگرفتیم که اعداد و کاراکترها را چگونه در آرایه قرار دهیم. برای استفاده از رشته ها باید از آرایه دو بعدی با نوع کاراکتر استفاده کنیم. به این نکته توجه نمایید که در زبان برنامه نویسی C++، رشته ها را بین " " و کاراکترها را بین ' ' قرار خواهیم داد. در زیر به نحوه تعریف یک رشته می پردازیم :

char str[] = "programming";
char s[10] = "computer";
char str1[] = {'C','+','+','\0'};

همانطور که در بالا می بینیم، نحوه تعریف یک رشته مانند تعریف یک آرایه است و از قوانین آرایه ها تبعیت می کند با این تفاوت که اگر مقدار بصورت رشته باشد باید آنرا در بین " " قرار دهیم و اگر مقادیر بصورت کاراکتر باشند آنها را در بین ' ' و بصورت مجموعه مقداردهی خواهیم کرد .

نکته) در مقداردهی یک String باید بدانیم که انتهای آن آرایه با تهی یا Null مشخص می شود. یعنی در خط اول از کد یالا یک آرایه بوجود خواهد آمد که اولین خانه آن حرف p و دومین خانه آن حرف r و علی آخر که در نهایت یکی مانده به آخرین خانه حرف g و آخرین خانه Null یا \0 می باشد .

۰ نظر موافقین ۰ مخالفین ۰

آموزش الگوریتم های مرتب سازی آرایه ها

  • الگوریتم مرتب سازی حبابی (bubble sort) :

این روش، ساده ترین روش مرتب سازی آرایه ها در C++ بوده که از کارایی کمتری نسبت به دیگر الگوریتمها برخوردار است و علت این است که عناصر آرایه دو به دو با یکدیگر مقایسه شده و اگر عنصر اول از عنصر دوم بزرگتر باشد جای آن دو عوض می شود ( در مرتب سازی صعودی )، بنابراین عمل مقایسه بارها تکرار شده، در نتیجه راندمان کار را پایین می برد. در زیر به نحوه عملکرد الگوریتم مرتب سازی حبابی توجه فرمایید :

 A = {7, 3, 9, 1}

 3 7 9 1 ---> 3 7 9 1 ---> 3 7 1 9     Step 1
 3 7 1 9 ---> 3 1 7 9 ---> 3 1 7 9     Step 2
 1 3 7 9 ---> 1 3 7 9 ---> 1 3 7 9     Step 3

همانگونه که ملاحظه کردید در مرحله اول، ابتدا 7 با 3 مقایسه شده و چون 3 از 7 کوچکتر است جایشان عوض می شود. سپس در همان مرحله 7 با 9 مقایسه شده و چون 9 از 7 بزگتر است پس جابجایی صورت نمی گیرد و در انتهای همان مرحله 9 با 1 مقایسه شده و بدلیل کوچکتر بدن 1 از 9 بین آن دو جابجایی صورت می گیرد .

۰ نظر موافقین ۰ مخالفین ۰

آرایه ها در ++C

خدمت عزیزان باید عرض کنم در فصول قبل، داده ها را در درون متغیرها و یا ثوابت ذخیره می کردیم. اما گاهی لازم است تعدادی از داده ها را بگونه ای ذخیره نماییم که متعلق به یک مجموعه بوده و دسترسی به آنها آسان باشد .

گاهی وقتها لازم است که یک سری از داده هم نوع را دریافت کرده و بروی آنها عملیات خاصی را مثل مقایسه یا مرتب کردن و ... را انجام دهیم، لذا باید آنها را بگونه ای خاص در کنار یکدیگر قرار دهیم که این مسئله در برنامه نویسی را با استفاده از آرایه ها حل خواهیم کرد .

آرایه مجموعه ای از عناصر هم نوع است. در برنامه نویسی C++ برای تعریف آرایه باید نوع عناصر آنرا مشخص کنیم و آرایه باید حتما دارای نام باشد که از قانون نامگذاری برای متغیرها تبعیت می کند و بعد از نام از [] استفاده می کنیم که درون آن می توان از یک عدد صحیح برای تعیین طول آرایه استفاده نمود .

تعریف آرایه و ساختار آرایه در برنامه نویسی C++

برای دسترسی به عناصر آرایه از اندیس استفاده می کنیم که اولین اندیس هر آرایه ای از عدد صفر شروع می شود .

int  arr[4];

کد برنامه نویسی C++ بالا آرایه ای را با نام arr تعریف می کند که عناصر آن از نوع عدد صحیح هستند و تعداد عناصر آرایه (طول) برابر با 4 است .

به این نکته توجه کنید که تعداد عناصر آرایه بالا 4 است ولی اندیس عناصر آن از صفر شروع شده و به سه ختم می شود و نباید تعداد را با اندیس اشتباه گرفت .

گفتنی است که عناصر آرایه پشت سر هم در خانه های حافظه ذخیره می شوند و هر عنصر (خانه) از آرایه به اندازه طول نوع آرایه فضا اشغال می کند. در آرایه بالا چون نوع آرایه تعریف شده int است پس هر عنصر مقدار 4 بایت و چون طول آن 4 است در نهایت 16 بایت پشت سر هم از حافظه را اشغال می کند .

معمولا آرایه ها با توجه به ابعادشان تقسیم بندی می شوند :

۰ نظر موافقین ۰ مخالفین ۰

توابع بازگشتی در ++c

توابع بازگشتی توابعی هستند که در درون تعریف خود تابع هم فراخوانی میشوند. هدف از اینکار صرفه جویی در کد نویسی و ایجاد خلاقیت است. به این نکته توجه داشته باشید که حتما شرطی برای تابع بازگشتی باید وجود داشته باشد تا برنامه به درستی اجرا شود و نتایج خواسته شده از تابع بدست آید و اگر این مورد رعایت نشود تابع بینهایت بار فراخوانی شده و هیچ وقت برنامه به پایان نمی رسد .

کدی به زبان C++ با استفاده از تابع بازگشتی بنویسید که حاصلضرب دو عدد را با استفاده از حاصلجمع آنها بدست آورد .(برای حل این مثال لازم است بدانید که :)

            a*b=a          ----->     اگر b=1
            a*b=a*(b-1)+a  ----->     اگر b>1                              

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

#include <iostream.h>
#include <conio.h>

int product(int, int);      

int main()
{
    int a, b;

    cout << "Enter first number :" ;
    cin >> a;
    cout << "Enter second number :" ;
    cin >> b;
            
    cout << product(a, b);

    getch();
    return 0;
}

int product(int a, int b)       
{
    if(b == 1)
        return a;
    return (a + product(a, b-1));
}

         //////////////////////توضیح\\\\\\\\\\\\\\\\\\\\

/*    a=4, b=3

1) if(3==1)
    return 4;
return(4+product(4,3-1))

2) if(2==1)
    return 4;
return(4+product(4,2-1))

3) if(1==1)
    return 4;
return(4+product(4,1-1))    */
Enter first number :4
Enter second number :3
12

در فراخوانی سوم از تابع بازگشتی بالا، شرط درست است پس مقدار 4 به فراخوانی دوم بر میگردد و باز با مقدار 4 فراخوانی دوم جمع شده و عدد حاصل که 8 است به فراخوانی اول بر میگردد و باز با 4 جمع شده و در نهایت مقدار 12 که جواب ماست چاپ می شود. حتما توجه کنید که از فراخوانی سوم به بعد شرط if نقض شده و فراخوانی تابع بازگشتی متوقف می شود .

در مورد توابع بازگشتی باید چندین نکته را رعایت کنید :

۰ نظر موافقین ۰ مخالفین ۰

توابع در ++c

در این فصل ما به بحث در مورد یکی از مفاهیم مهم و اساسی در برنامه نویسی به نام توابع می پردازیم. در واقع در فصول قبل، ما مقداری از الزامات و مقدمات برنامه نویسی را یاد گرفتیم و تا کنون برنامه خاصی ننوشتیم .

وقتی خطوط برنامه ما زیاد می شود درک، پیگیری، خطایابی و دیگر اعمال بر روی برنامه دشوار خواهد شد. توابع ابزاری هستند که به ما در بهبود برنامه کمک می کنند و برنامه نویسی ساخت یافته را ارائه می دهند، بدین معنا که برنامه اصلی به قسمتهای منطقی و مستقل کوچکتری تقسیم می شود که توابع نام دارند .

برای بکارگیری توابع به سه جزء نیازمندیم: تعریف تابع، اعلان تابع، فراخوانی تابع

  • تعریف تابع :
آموزش تعریف تابع و توابع و پارامترهای و ورودی و نوع توابع در برنامه نویسی C++

برای استفاده از یک تابع در برنامه نویسی در مرحله اول باید تابع خود را تعریف نماییم تا مشخص کنیم که چه کاری را باید انجام دهد. در شکل بالا ساختار اصلی تعریف یک تابع در برنامه نویسی C++ را مشاهده می کنید . تعریف تابع در خارج از تابع main صورت می گیرد و هیچ تابعی را نمی توان در درون تابع دیگری تعریف نمود .

۰ نظر موافقین ۰ مخالفین ۰