Old 04-04-2009, 07:25 AM
  post #1
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
classes in C++

Classes OR Defining Your Own Data Types


class ဆုိတာ ဘာလဲ ? class ကုိ ဘာေၾကာင့္ အသံုးျပဳၾကသလဲ ? class က ဘာေတြ စြမ္းေဆာင္နိုင္စြမး္ ရွိသလဲ ?
ကဲ အဲဒီ့ေတာ့ class ဆိုတာ ဘာလဲလုိ ့မေျပာေသးခင္ class ျဖစ္ေပၚလာပံုေလးကုိ အရင္ ေျပာျပပါမယ္။ ဒီေတာ့ class မတုိင္ခင္ အသံုးျပဳတဲ့ struct အေၾကာင္းကို အရင္ေျပာမွ ရလိမ့္မယ္။

The struct in C++
structure ဆုိတာ struct ဆုိတဲ ့ keyword ကုိ အသံုးၿပဳထားတဲ့ user-defined type ပါ။ C++ မေပၚခင္ C language မွာ struct ကုိ အသံုးျပဳခဲ့ၾကတာပါ။ C++ မေပၚခင္ Windows ေရးရာတြင္ C ႏွင့္ ေရးၾကတယ္။ အဲေတာ့ Windows Programming မွာ struct ကုိ က်ယ္က်ယ္ျပန္ ့ျပန္ ့အသံုးျပဳခဲ့ၾကတယ္။

What is a struct ?

variable အားလံုးနီးပါးဟာ သူ ့ရဲ ့ single data type တစ္ခုစီ ရွိၾကတယ္။ ဂဏန္းတစ္လံုး၊ character တစ္လံုး စသည္ျဖင့္ေပါ့။ က်ေနာ္ ဆုိလုိခ်င္တာက ဥပမာ
int number_1;
double number_2;
char name[40];
int box[10];
ဆုိပါစို ့။၎ကို declaration လုိ ့ေခၚတယ္။ဥပမာ int number_1; မွာ ဆုိရင္ int ဟာ data type ျဖစ္ၿပီးေတာ့ number_1 ဟာ variable ျဖစ္ပါတယ္။ number_1, number_2, name, box စတဲ့ variable ေတြအတြက္ သူနဲ ့ဆုိင္ရာဆုိင္ရာ int, double, char array ရွိၾကတယ္။ ၎နည္းတူ integer ဆုိလဲ integer ကိန္းတစ္လံုးပဲ store လုပ္နုိင္တယ္။ double တုိ ့၊ float တို ့၊ array ေတြ လဲ ထိုနည္းတူပါပဲ။ ဥပမာ
number_1 = 123;
number_2 = 345.56;
name[4] = { "mg mg", "aung aung", "john", "smith" };
box[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
ဆုိပါစို ့။ ၎ကို initialization လုိ ့ေခၚပါတယ္။ အဲေလာက္ဆုိ single data type အလုပ္လုပ္ပံုကုိ နားလည္ၿပီလုိ ့
ထင္ပါတယ္။

သို ့ေသာ္ တကယ့္ real world မွာ အနည္းငယ္ ပိုရွဳပ္ေထြးပါတယ္။ ဥပမာ စာအုပ္(Book) နဲ ့ ပတ္သတ္တဲ့ information ေတြကို က်ေနာ္တုိ ့ေလ့လာၾကည့္ရေအာင္။ ကဲ စာအုပ္တစ္အုပ္မွာ ေယဘူယ်အားျဖင့္ မပါမျဖစ္ information ေတြ ရွိတယ္။ ဘာေတြလဲၾကည့္ရေအာင္။ စာအုပ္နာမည္၊ စာေရးဆရာနာမည္၊ ထုတ္ေ၀သူ၊ ထုတ္ေ၀သည့္ခုႏွစ္၊ စာအုပ္စာမ်က္ႏွာ၊ စာအုပ္ေစ်းႏွူန္း၊ စာမူခြင့္ျပဳခ်က္အမွတ္ စသည္ျဖင့္ေပါ့ေလ။ အဲဒီ့ေတာ့ စာအုပ္တစ္အုပ္ကို ေဖာ္ျပဖုိ ့အတြက္ သူ ့ရဲ ့ parameters (စာအုပ္နာမည္၊ စာေရးဆရာနာမည္၊ ထုတ္ေ၀သူ၊ ထုတ္ေ၀သည့္ခုႏွစ္၊ စာအုပ္စာမ်က္ႏွာ၊ စာအုပ္ေစ်းႏွူန္း၊ စာမူခြင့္ျပဳခ်က္အမွတ္) အလိုက္ မတူညီတဲ ့ single data type ေတြျဖစ္ေနလိမ့္မယ္။ စာအုပ္နာမည္ဆုိရင္ char type ျဖစ္ၿပီးေတာ့ ထုတ္ေ၀သည့္ ခုႏွစ္ဆုိရင္ int type ျဖစ္ေနလိမ့္မယ္။ အဲဒီ့ေတာ့ အဲဒီ့ parameters ေတြကို ေပါင္းစုၿပီး BOOK ဆုိတဲ့ နာမည္နဲ ့ single data type လုပ္ခ်င္တယ္ဆုိရင္ ဘယ္လုိလုပ္မလဲ။ အဲဒီ့အတြက္ struct တည္ရွိေနတာ ျဖစ္ပါတယ္။

Defining a struct
ခုနက စာအုပ္ကုိ struct နဲ ့ ဖြဲ ့စည္းလုိက္မယ္ဆုိရင္ အခုလိုမ်ိဳး ရရွိလာပါလိမ့္မယ္။ parameter ကုိ ၄ ခုပဲ ထည့္ထားပါတယ္။


က်ေနာ့္အေနနဲ ့ struct ကုိ ဒီေလာက္ပဲ ေဆြးေႏြးသြားပါမယ္။ အၾကမ္းဖ်ဥ္း ေျပာရရင္ class နဲ ့ struct ဟာ သေဘာတရား အတူတူပါပဲ။

class in C++
class ဆုိတာ အဲဒီ့ structure ကေန အဆင့္ျမင့္လာတဲ့ concept ပါ။ class နဲ ့ structure ဘာကြာသလဲဆုိရင္ struct ဟာ data members ေတြကိုပဲ ကုိင္တြယ္နုိင္ၿပီးေတာ့ class ကေတာ့ data members အျပင္ function members ေတြကိုပါ ကိုယ္တြယ္နုိင္ပါတယ္။ classes ေကာ၊ structures ေကာ ပါ data ေတြကို အကန္ ့အသတ္မရွိ ကုိင္တြယ္နုိင္ပါတယ္။

Terminology
  • class ဟာ user-defined type ပါ။ user-defined type ဆုိတာ user ကေန ကိုယ္ပိုင္ ဖန္တီးလုိက္တဲ့ data type တစ္ခုလို ့ ေျပာခ်င္တာပါ။ own data type လုိ ့ေခၚခ်င္လဲ ေခၚလုိ ့ရပါတယ္။ C++ က defined လုပ္ထားတဲ ့ data type (e.g, int, double, char) တုိ ့လုိ မဟုတ္ပါဘူး။
  • Object-oriented programming(OOP) လုိ ့ လူသိမ်ားတဲ ့ programming style ဟာ ဒီclasses လုိမ်ိဳး own data types ေတြရဲ ့ idea ကုိ အေျခခံထားတာျဖစ္ပါတယ္။
  • class type တစ္ခုမွာ object တစ္ခုကို ဖန္တီးလုိက္ျခင္း၊ declaration လုပ္လုိက္တာကုိ instantiation လုိ ့ ေခၚပါတယ္။ ဘာလုိ ့ဆုိေတာ့ အဲဒီ့ class ရဲ ့ instance တစ္ခုအျဖစ္ create လုပ္လုိက္ေသာေၾကာင့္ ျဖစ္ပါတယ္။
  • class ရဲ ့ objects ေတြကို instances လုိ ့ ေခၚလုိ ့ရသလုိ ၎ကုိပဲ objects လုိ ့ ေခၚလို ့လဲရပါတယ္။
  • class ကုိ encapsulation လုိ ့ေခၚနုိင္ပါတယ္။ ဘာလုိ ့ဆုိေတာ့ သူ ့အထဲမွာ မတူညီတဲ ့ data members ေတြ၊ function members ေတြအားလံုးကုိ class name ေပးၿပီး ထိ္န္းခ်ဳပ္ထားနုိင္လုိ ့ ျဖစ္ပါတယ္။

Members of the class
class ထဲမွာပါတဲ ့ data ေတြ၊ functions ေတြကို class ရဲ ့ members ေတြလုိ ့ေခၚပါတယ္။ class ထဲမွာပါတဲ ့ data items ေတြကုိ data members ေတြလို ့ေခၚၿပီး class ထဲမွာ ပါတဲ ့ functions ေတြကိုေတာ့ function members or member functions ေတြလုိ ့ေခၚပါတယ္။ ဒါေပမဲ ့ တစ္ခ်ုိဳ ့ ေနရာေတြမွာ member functions ေတြကို methods လုိ ့ ေခၚၿပီး data members ေတြကို fields လုိ ့ေခၚၾကတာ ေတြ ့ရပါတယ္။

Defining a class
class keyword ကုိ အသံုးျပဳၿပီးေတာ့ CBox ဆုိတဲ ့ data type ေလးတစ္ခုကို define လုပ္ၾကည့္ရေအာင္။


Access control in a class
အဲဒီ့မွာ public ဆုိတဲ ့keyword ကို အားလံုးပဲ ျမင္ၾကပါလိမ့္မယ္။ အဲမွာ public နဲ ့ access လုပ္ထားတဲ ့ data members သံုးခု ရွိ္ပါတယ္။ ဆုိလုိခ်င္တာက အဲဒီ့ data members ေတြအားလံုးကုိ class object ရဲ ့ သူ ့ scope အတြင္း ဘယ္ေနရာမွာမဆုိ access လုပ္နုိင္တယ္ဆုိတဲ ့သေဘာပါ။ အဲလုိ public လုိမ်ိဳ း class မွာ private နဲ ့ protected ဆုိၿပီး ေနာက္ထပ္ ႏွစ္မ်ိဳး ရွိပါေသးတယ္။ သူတုိ ့ရဲ ့ သေဘာတရားကိုေတာ့ ေနာက္ပိုင္းက်မွ က်ေနာ္ ဆက္ေဆြးေႏြးေပးပါမယ္။ ဒါနဲ ့ class name ကုိ CBox လုိ ့က်ေနာ္ နာမည္ေပးထားကုိ သတိျပဳေစခ်င္ပါတယ္။ ဘယ္ variable name, function name, class name ပဲျဖစ္ျဖစ္ ၾကိဳက္တဲ ့ နာမည္ေပးလို ့ရပါတယ္။ ဒီေနရာမွာ က်ေနာ္အၾကံျပဳခ်င္တာက အဲဒီ့ name ကုိ သက္ဆုိ္င္ရာ နာမည္ပဲ ေပးေစခ်င္ပါတယ္။ ဥပမာ ခင္ဗ်ားအေနနဲ ့ ဂဏန္းေတြ ေပါင္းတဲ ့ function ေရးမယ္ဆုိရင္ function name ကုိ ွွSum() စသျဖင့္ေပးသင့္ပါတယ္။ ဒါဟာ ကိုယ္တုိင္ပဲ ျဖစ္ျဖစ္ ၊ တစ္ျခား တစ္ေယာက္ေယာက္ကပဲ ျဖစ္ျဖစ္ ကိုယ့္ program ေနာက္တစ္ခ်ိန္မွာ ျပန္ၾကည့္မယ္ဆုိရင္ name ေတြကို ၾကည့္လုိက္တာနဲ ့ကို program ကုိ trace လုိက္ရာမွာ လြယ္ကူသြားေစပါတယ္။ ျပန္ဆက္ရရင္ CBox ဆုိတဲ ့ class name ကုိ ဘာနာမည္ေပးေပးရပါတယ္။ CBox မွလုိ ့မဟုတ္ဘူး။ Box လုိ ့ေပးလဲ ရပါတယ္။ ဒါေပမဲ ့ MFC က class names တိုင္းရဲ ့ ေရွ ့မွာ C ဆုိတဲ့ အကၡရာေလးကုိ အျမဲတမ္းကိုယ္ပိုင္သေဘာမ်ိဳးသံုးစြဲဖုိ ့ေမြးစားထားပါတယ္။ (must do မဟုတ္ပါ။ ဗဟုသုတ အေနနဲ ့ပဲျဖစ္ျဖစ္ပါ ။အၾကံေပးတာပါ။) ၿပီးေတာ့ data members ေတြမွာ တစ္ခ်က္ၾကည့္လုိက္ပါ။ m_Length လုိ ့ က်ေနာ္ နာမည္ေပးထားပါတယ္။ အဲဒီ့ m_ ေလး ေရွ ့က ေပါင္းထည့္ထားတာဟာ ဒီ variable name ကုိ တစ္ျခားေသာ variable နဲ ့ယွဥ္ၾကည့္လုိက္ရင္ ဒီ name ဟာ class ရဲ ့ data member မွန္း အလြယ္တကူ သိသာေစရန္ ျဖစ္ပါတယ္။ (must do မဟုတ္ပါ)

Declaring Objects of a Class

ဒါဆုိရင္ က်ေနာ္တုိ ့ရဲ ့ class တစ္ခုကို ကုိယ္တုိင္ ဖန္တီးၿပီးသြားပါၿပီ။ ဒီေတာ့ objects ေတြကို main() function ဖန္တီးရေအာင္။

အဲဒီေတာ့ box1 နဲ ့ box2 မွာ သူတုိ ့ရဲ ့ ကုိယ္ပုိင္ data members (m_Length, m_Width, m_Height) သံုးခုစီ ရွိသြားၾကပါၿပီ။ ဒါေပမဲ ့ အဲဒီ ့data members ေတြကုိ initialize မလုပ္ထားရေသးတဲ့အတြက္ box1 ရဲ ့ data members ေတြဟာ junk values ေတြအျဖစ္ပဲ တည္ရွိေနပါတယ္။ ဒါဆုိ initialize လုပ္ရေအာင္။

Accessing the data members of a class
class တစ္ခုရဲ ့ data members ေတြကုိ access လုပ္ဖုိ ့အတြက္ ဆုိရင္ direct member selection operator(.) ကုိ အသံုးျပဳၿပီးေတာ့ access လုပ္နုိင္ပါၿပီ။ ကဲ ၾကည့္ရေအာင္



class ရဲ ့အျပင္မွာဆုိရင္ က်ေနာ္တုိ ့ဟာ အဲပံုစံအတုိင္းပဲ လုပ္ၾကရပါမယ္။
form နဲ ့ဆုိရင္ object_name.data_member_name = value; .......ေနာက္တစ္ခုရွိေသးတာက public နဲ ့ control လုပ္ထားလို ့အဲလုိ ရတာပါ။ အကယ္၍ public နဲ ့ define လုပ္မထားရင္ ဒီ statement ကုိ compiler က run ေပးမွာ မဟုတ္ပါဘူး။

Use of class
ဒါဆုိ က်ေနာ္တို ့တစ္ပုဒ္ေလာက္ စမ္းၾကည့္ရေအာင္..ေလ့လာၾကည့္ရေအာင္




အဲဒီ့ program ကုိ run လုိက္ရင္ ဒီလုိ ရလာပါလိ္မ့္မယ္..



NOTE
ဒီ program ဟာ class ကုိ သံုးတယ္ဆုိရံုပါပဲ။ class ကို ဘယ္လုိသံုးရတယ္၊ ဘယ္လုိဖြဲ ့စညး္ထားတယ္ ဆုိတာပါပဲ။ program ကေတာ့ ဘာမွ ထူးထူးျခားျခား မပါလုိ ့ မရွင္းျပေတာ့ပါဘူး။ class ရဲ ့ သြားပံု၊လာပံုေတြကုိ ေသခ်ာ ေလ့လာၾကည့္လုိက္ပါ။ အဲထဲမွာ သံုးထားတဲ့ sizeof ဆုိတဲ ့ keyword က object တစ္ခုခ်င္းစီ ရဲ ့ size (class ရဲ ့ size) ကုိ ရွာဖုိ ့သံုးတဲ့ keyword ေလးပါ....

/* C++ programming ကုိ ေလ့လာလုိက္စားမယ္ဆုိရင္ေတာ့ class ဟာ C++ ရဲ ့ fundamental ပါပဲ။ ဒါေၾကာင့္ ဒါကုိ မက်ြမ္းက်င္လုိ ့ မရပါဘူး။ ဒါေၾကာင့္ က်ေနာ္သိတာေလးေတြ ေျပာၾကည့္တာပါ။ မွားယြင္းတာေတြရွိရင္ ျပန္လည္သြန္သင္ ေပးဖုိ ့ ေမတၱာရပ္ခံ ပါရေစ။ ဒါနဲ ့ က်ေနာ္ေရးတဲ့ software က microsoft visual studio (2008) ႏွင့္ပါ။ ေပ်ာ္ရႊင္ပါေစ everybody !! */

Last edited by green leaf; 01-05-2009 at 09:58 PM..
green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 24 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 04-04-2009, 06:55 PM
  post #2
မုိးလြင္
အထူးအသင္း၀င္
 
မုိးလြင္'s Avatar
 
အသင္း၀င္ေန႔စြဲ: Jan 2008
ေရးသားခ်က္မ်ား: 878
ေက်းဇူးတင္စကား: 836
ပို႔စ္ 754 ခုအတြက္ 2,430 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
မုိးလြင္ is on a distinguished road
ျပန္စာ - classes in C++

green leaf ဆက္ေရးပါ...ဘယ္အေၾကာင္းအရာနဲ႔ ပတ္သက္ျပီးပဲ ေရးေရး ကြၽန္ေတာ္တုိ႔ မိသားစု ဖုိရမ္ေလးမွာ အက်ဳိးမရွိဘူးဆုိတာ မရွိပါဘူး...C++ ကုိ ေလ႔လာေနသူမွ မဟုတ္ပါဘူး...စိတ္၀င္စားတဲ႔ ညီအစ္ကုိေမာင္ႏွမမ်ား အတြက္လဲ အက်ဳိးရွိပါႏုိင္ပါတယ္ဗ်ာ...အားေပးပါတယ္...
မုိးလြင္ is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 7 ဦးတို႔မွ မုိးလြင္ အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 04-04-2009, 08:48 PM
  post #3
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
ျပန္စာ - classes in C++

Member Functions

/* classes နဲ ့ပါတ္သတ္လုိ ့ ဆက္ေဆြးေႏြး သြားပါမယ္။ classes နဲ ့ ပါတ္သတ္လို ့ ေဆြးေႏြးဖုိ ့က ေတာ္ေတာ္ေလး မ်ားျပားပါတယ္။ တစ္ခုခ်င္းစီ ေသခ်ာေလးၾကည့္နုိင္မွ မရွုပ္ေထြးမွာ ျဖစ္ပါတယ္။ က်ေနာ္ တင္ျပခ်င္တဲ့ ပံုစံကေတာ့ တတ္က်ြမ္းၿပီးသားသူေတြ ဖတ္ၿပီးရင္ေတာ့ အက်ယ္ခ်ဲ ့တယ္လုိ ့ ျမင္ၾကပါလိမ့္မယ္။ ဒါေပမဲ့ က်ေနာ္က အေသးစိတ္ခ်င္တာပါ။ ဆုိလိုတာက က်ေနာ္သိသမွ် class နဲ ့ပတ္သတ္တဲ့ အေၾကာငး္အရာ အသစ္ တစ္ခုပါလာတာနဲ ့ program တစ္ပုဒ္နဲ ့သီးသန္ ့စီ ျဖည္းျဖည္းခ်င္း တင္ျပခ်င္ပါတယ္။ class နဲ ့ပတ္သတ္လုိ ့ တစ္ခ်ိဳ ့ေနရာေတြမွာ ေသေသခ်ာခ်ာ မရွင္းလင္းတဲ့ သူေတြအတြက္ တစ္ဆင့္ျခင္း ၾကည့္ရေတာ့ သူတုိ ့အတြက္ အက်ိဳးရွိမယ္လုိ ့က်ေနာ္ယံုၾကည္တယ္။ အဲမွာ က်ေနာ္အျမင္ေလးျဖည့္ေျပာရရင္ တစ္ခ်ိဳ ့ statements ေတြ၊ တစ္ခ်ိဳ ့ keywords ေတြ၊ တစ္ခ်ိဳ ့ေနရာမွာ သံုးထားတဲ့၊ ယူဆထားတဲ ့ logic ေလးေတြက ခ်က္ခ်င္း သေဘာမေပါက္ပါဘူး။ က်ေနာ္လဲ တစ္ခ်ိဳ ့ဟာေလးေတြက တစ္လေက်ာ္မွ အဲဒီ့ program ရဲ ့ အဲေနရာေလးမွာ ေရးထားတဲ့ သေဘာတရားကုိ နားလည္သြားတာမ်ိဳး ခဏခဏၾကံဳဖူးပါတယ္။ အဲဒါေၾကာင့္ တစ္ခ်ုိဳ ့ပုစၦာေတြအတြက္ ခ်က္ခ်င္း မရလုိ ့စိတ္မပ်က္သြားပါနဲ ့။ ကဲ စကားေျပာတာေတြမ်ားေနၿပီ။ လုပ္လုိက္ရေအာင္။ကဲ class ရဲ ့ အစကုိ နဲနဲျပန္သြားရေအာင္။ */

class ဆုိတဲ့ keyword ကို အသံုးျပဳတဲ့ classes ေတြရဲ ့ general format က ေအာက္ပါအတုိင္း ျဖစ္ပါလိမ့္မယ္...

  1. class === keyword
  2. class_name === ဘယ္လုိနာမည္ျဖစ္ျဖစ္ရပါတယ္..C++ မွာ variables ကုိပဲျဖစ္ျဖစ္၊ functions ကုိပဲျဖစ္ျဖစ္၊ classes ေတြကိုပဲျဖစ္ names ေပးရာမွာ ကန္ ့သတ္ခ်က္ေတြ ရွိပါတယ္။ (ေနာက္မွအဲဒါကို သီးသန္ ့ ေဆြးေႏြးေပးပါမယ္။)
  3. access_specifier_1 & 2 === အဲဒါကုိ public တုိ ့၊ private တုိ ့၊ protected တုိ ့ကို ေျပာတာပါ။ သူ ့တုိ ့ရဲ ့ scope အလုိက္ access လုပ္နုိင္ၾကပါတယ္။ သာမန္အားျဖင့္ေတာ့ public နဲ ့ပဲ အရင္အသံုးျပဳၾကပါ။ အကယ္၍ ဘာမွေျပာမထားခဲ့ဘူးဆုိရင္ default access_specifier က private ပါ။ ဒါေၾကာင့္ သတိထားၿပီး သံုးပါ။ မေမ့ခဲ့ပါႏွင့္။ (access control နဲ ့ပါတ္သတ္လုိ ့ေနာက္မွာ ေဆြးေႏြးေပးပါမယ္..)
  4. members1 & 2 === အဲဒါေတြကို data members(is sometimes called 'fields') နဲ ့ function members (is sometimes called 'methods') တုိ ့ကို ဆုိလုိတာပါ။ 1 နဲ ့ 2 ခြဲထားတာက data members ေတြနဲ ့ function members ေတြ access_specifier ေတြ မတူခဲ့ရင္ ခြဲထားတဲ့ သေဘာမ်ိဳးပါ။ struct ေကာ၊ class မွာပါ data members, function members ေတြနဲ ့ ပါတ္သတ္လုိ ့ limit မရွိပါဘူး။
  5. object_names === ဘာနာမည္ပဲျဖစ္ျဖစ္ ေပးထားလုိ ့ရပါတယ္...

Member functions in class
member functions ေတြမွာ အမ်ိဳးအစားအေနနဲ ့ ခြဲလုိ ့ရေကာငး္မယ္ဆုိရင္ေတာ့ static နဲ ့ non-static ဆုိၿပီး ရွိပါတယ္။ ဘာကြာလဲဆုိရင္ေတာ့ static member functions ေတြမွာ this pointer အသံုးျပဳလုိ ့မရဘူး။ non-static မွာက်ေတာ့ this pointer အသံုးျပဳလုိ ့ရပါတယ္။ ေနာက္တစ္ခုက functions ေတြကို class declaration ရဲ ့ အတြင္းထဲမွာ ေရးသားရင္ ဒါဟာ inline function ျဖစ္ပါတယ္။ class ရဲ ့ အျပင္မွာ ထုတ္ေရးၿပီးေတာ့ inline function ျဖစ္ခ်င္ရင္ inline ဆုိတဲ့ keyword ေလး ေရွ ့က ထည့္ေပးလုိက္တာပါပဲ။ this pointer နဲ ့ inline function ကုိ ေနာက္မွ သီးသန္ ့ ေျပာေပးပါမယ္။

ကဲဗ်ာ class ထဲမွာ member function ေတြ စသံုးၾကည့္ရေအာင္။ ပထမဆံုးအပုဒ္က data members ေတြနဲ ့ပဲ အသံုးျပဳထားတာ ခင္ဗ်ားတုိ ့လဲ ျမင္နုိင္ပါတယ္။ ဒီပုစၧာကလဲ ရုိးရိုးရွင္းရွင္း ေလးပါ။ ကဲ run ၾကည့္ရေအာင္။





How It Works

အဲဒီ့မွာဗ်ာ ဒါဟာ class ရဲ ့ ဒုတိယ sample ပါ။ class ထဲမွာ function သံုးထားတာကုိ ျမင္ၾကပါလိမ့္မယ္။ class ထဲမွာ function သံုးတာက ရိုးရိုး function အသံုးျပဳပံုနဲ ့အတူတူပါပဲ။ function ကုိ class ရဲ ့ outside မွာ ေရးခ်င္ရင္ေတာ့ function ရဲ ့ ထံုးစံအတုိင္း function prototype ကုိ class ထဲမွာ declare လုပ္ခဲ့ပါ။ အဲဒီ့မွာ class ရဲ ့ member function ကုိ outside မွာ ေရးတာေတာ့ ေရးပါ။ ဒါေပမဲ့ အဲဒီ့ function က class ရဲ ့ပိုင္ဆုိင္မွု ျဖစ္လုိ ့ function name ရဲ ့ေရွ့မွာ class name ကုိ ထည့္ေပးရပါတယ္။ ဒါပါပဲ။ ဒီလုိေလးေပါ့
void CRectangle::set_values (int a, int b)
{
}
ဒီလုိ form ေလးပါ။
function_return_type class_name: :function_name(_parameters)
္အဲဒီ့မွာ class name နဲ ့ function name ၾကားက ဒီ operator (: :) ေလးကုိ scope resolution operator လုိ ့ေခၚပါတယ္။ ဒီ operator ကုိ member functions ေတြကို class ရဲ ့အျပင္မွာ ထုတ္ေရးတဲ့အခါတုိငး္မွာ အသံုးျပဳပါတယ္။

sample မွာ class ထဲမွာ က်ေနာ္ member functions ႏွစ္ခု အသံုးျပဳထားပါတယ္။ တစ္ခုက အေပၚမွာ ေျပာေနတဲ့ function ကုိ class ရဲ ့အျပင္မွာ ထုတ္သံုးထားၿပီး က်န္တဲ့ တစ္ခုက အတြင္းမွာပဲ ဒီအတုိင္း အသံုးျပဳထားပါတယ္။ ဘယ္လုိသံုးသံုး အတူတူပါပဲ။ ဒါေပမဲ့ အျပင္မွာ ထုတ္သံုးထားေတာ့ class ကုိ ၾကည့္ရတာ သက္သက္သာသာလဲ ရွိတယ္။ အဓိက ေကာင္းတာကေတာ့ class က ရွင္းရွင္းလင္းလငး္ျဖစ္ေနၿပီး တစ္ျခား တစ္ေယာက္က ၾကည့္လုိက္ရင္ အဲဒါ ဘာကို ေရးထားတာလဲ ဆုိတာ အလြယ္တကူ ျမင္နုိင္ပါတယ္။

ေနာက္ထပ္ တစ္ပုဒ္ေလာက္ ၾကည့္လုိက္ပါဦး။ အဲဒါက ပထမပုစၧာ ကုိမွ member function ထည့္သံုးလုိက္ေတာ့ ၾကည့္ရတာ ပိုၿပီး ျမင္လိမ့္မယ္လုိ ့ ထင္လုိ ့ပါ။ ဒီပုစၧာက ဘာမွမထူးျခားလုိ ့ဘာမွေတာ့ မေျပာေတာ့ပါဘူး။ ဒါေပမဲ ့ class တည္ေဆာက္ပံုနဲ ့ function members ေတြ အသံုးျပဳပံုကုိ ေသခ်ာၾကည့္ၾကည့္ပါဦး။




ႊTo Be Continued
-<>-<>-

Last edited by green leaf; 05-04-2009 at 07:20 AM..
green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 12 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 04-04-2009, 09:28 PM
  post #4
ေဗဒါေလး
ကိုယ္ပိုင္အစြမ္းရွိၿပီးသူ
 
အသင္း၀င္ေန႔စြဲ: Mar 2008
ေရးသားခ်က္မ်ား: 228
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 218
ပို႔စ္ 162 ခုအတြက္ 774 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
ေဗဒါေလး is on a distinguished road
ျပန္စာ - classes in C++

ေကာင္းတယ္ဗ်ာ..ကို green leaf ။ ဆက္ေရးပါ။ မွန္တာေျပာရရင္ လက္ရွိက်ေနာ္ေက်ာင္းမွာ class သင္ေနရတာ ရြာပတ္ေနတုန္း
ပါပဲ။ ခင္ဗ်ားေရးသားတင္ျပထားတာေတြက က်ေနာ့္အတြက္အျပင္ တစ္ျခားလူေတြအတြက္ပါ အက်ုိဳးတစ္စံုတစ္ရာ ရွိနိုင္မွာပါ။

[SIZE="3"][SIZE="4"][SIZE="5"][FONT="Arial Black"][COLOR="Blue"]"အလိုအပ္ဆံုးက ဘ၀မွာအရုိုးသားဆံုးေနဖို႔"[/COLOR][/FONT][/SIZE][/SIZE][/SIZE]
ေဗဒါေလး is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 3 ဦးတို႔မွ ေဗဒါေလး အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 05-04-2009, 02:28 AM
  post #5
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
ျပန္စာ - classes in C++

စိတ္၀င္စားတဲ့ သူရွိတယ္ဆုိလုိ ့ ၀မ္းသာပါတယ္ဗ်ာ.. က်ေနာ္လဲ ေရးရတာ အားတက္တာေပါ့.... ဒါနဲ ့ က်ေနာ့္ အေရးအသားေကာ အဆင္ေျပရဲ ့လား... ဖတ္ရတာ ဘယ္လုိ အေျခအေနေတြ ရွိလဲ.. ဘာလုိ ့ဆိုေတာ့ က်ေနာ္လဲ တစ္ခါမွ စာမေရးဘူးေတာ့ေလ(ဒိုင္ယာရီေတာ့ ေရးဘူးပါတယ္)... ဒါနဲ ့ က်ေနာ္ တစ္ခု ေျပာခ်င္တာက post ကုိ သတိရတဲ့အခ်ိန္ေတြမွာ ျပန္လည္ modify လုပ္ထားတာေတြ ရွိပါတယ္... စိတ္ကလဲ ေရးတဲ့အခ်ိန္မွာ အကုန္လံုးကုိ တစ္ခါတည္း ခ်ေရးျပလုိ ့အဆင္မေျပဘူးေလ .. သူ ့ဟာနဲ ့သူ တစ္ဆင့္ခ်င္းပဲ ေရးရတာ ဆုိေတာ့ ၿပီးေတာ့ တစ္ခ်ိဳ ့ေနရာေလးေတြမွာ ခ်က္ခ်င္း မစဥ္းစားမိတာေတြ ရွိတယ္.. ဒါေၾကာင့္ ေနာက္မွ ၾကည့္ၿပီး modify လုပ္ထားတာေတြ ရွိပါတယ္.. ဒါေၾကာင့္ တစ္ေခါက္ေလာက္ ျဖစ္ျဖစ္၊ သတိရတဲ့အခ်ိန္မွျဖစ္ျဖစ္ ျပန္ဖတ္ၾကည့္ ေစခ်င္ပါတယ္...


green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 6 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 06-04-2009, 04:04 PM
  post #6
yemin
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Jul 2008
တည္ေနရာ: russia
ေရးသားခ်က္မ်ား: 65
ေက်းဇူးတင္စကား: 0
ပို႔စ္ 22 ခုအတြက္ 27 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
yemin is on a distinguished road
ျပန္စာ - classes in C++

ဟုတ္ ပါတယ္အကို...ျပန္ျပီးျပဳျပင္တာေကာင္းပါတယ္..ဘာလုိ့လဲဆုိေတာ့ ပရုိဂရမ္ဆိုတာ တရက္ဖတ္ျပီး၇င္ မွတ္မိတဲ့အ၇ာမွမဟုတ္ပဲ....က်ြန္ေတာ္တုိလည္း ဒီအပိုင္းေတြသင္ေနပါတယ္..ျပီးေတာ့ျပီးသြားျပီ ဒါေပမယ့္ အကိုေ၇းထားတာကိုျပန္ဖတ္မွပဲ ေတာ္ေတာ္ ေလး နားလည္သြားတယ္..အ၇မ္းအက်ိဳးျပီး။ ကုသုိလ္လည္း၇ပါတယ္အကို...ေက်းဇူးလည္းတင္ပါတယ္..ျပန္၀င္ျကည့္၇င္လည္း အစကမဟုတ္၇င္ေတာင္အနည္းဆုံးအျကမ္းေလးေတာ့ျပန္ဖတ္ပါတယ္..အကိုအေနနဲ့ျပုျပင္ျပီး ေ၇းတယ္ဆုိတာ...လုပ္သင့္ပါတယ္...ေထာက္ခံတယ္အကို..အျမဲအားေပးသြားမယ္...တျခား ေက်ာင္းေတြမွာ ဆုိ ဘားမွမသိတဲ့အတြက္ စိတ္မေကာင္းျဖစ္မိပါတယ္...ညီတုိ့လည္းကူညီခ်င္ပါတယ္..ေကာင္းေကာင္းမ၇လုိ့ပါ...အခုလုိအကိုေ၇းထားလုိ္က္ေတာ့ အက်ိဳးရွိပါတယ္..သူတုိ့ကိုလည္းေလ့လာလုိ့၇ေအာင္လင့္ေပးလုိ့၇တာေပါ့...

:6::28:
yemin is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 3 ဦးတို႔မွ yemin အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 10-04-2009, 03:04 AM
  post #7
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
ျပန္စာ - classes in C++

Class Constructors


အေပၚက sample_02 မွာ ၾကည့္လုိက္ပါ။ CBox class ရဲ ့ objects မ်ားျဖစ္တဲ ့ box1 နဲ ့ box2 နဲ ့ပတ္သတ္တဲ ့ data members သံုးခုကို initialize လုပ္ထားတာကုိ main() function ထဲမွာ ေတြ ့နုိင္ပါတယ္ ( ဥပမာ box1.m_Height = 18.0; ) စသည္ျဖင့္ box1 အတြက္ သံုးခု၊ box2 အတြက္ သံုးခု initialize လုပ္ထားတာကုိ ျမင္ၾကပါလိမ့္မယ္။ ဒါေပမဲ့ အဲလို initialize လုပ္ထားတာဟာ ဘယ္ေနရာကပဲ ၾကည့္ၾကည့္ မျပည့္စံုပါဘူး။ မရဘူးလုိ ့ ေျပာတာ မဟုတ္ပါဘူး။ အဆင္မေျပဘူးေပါ့ေလ။ ဘာလို ့ဆုိေတာ့ အခုက box1 နဲ ့ box2 ဆုိတဲ ့ object ႏွစ္ခုပဲ ရွိေသးတာကုိး ။ အကယ္၍ object ေတြဟာ ႏွစ္ခုထက္မကတဲ ့ (ဥပမာ ၁၀ ခုေလာက္ဆုိ) ဘယ္ႏွယ့္ေနမလဲ။ initialize လုပ္တဲ ့ statements ေတြ ေဖာင္းပြေနမွာေပါ့။ ဟုတ္တယ္မုိ ့လား ။ ဒါက တစ္ေၾကာငး္ပဲ ရွိေသးတယ္။ တစ္ျခား အေၾကာင္းအရာေတြ မ်ားစြာ ရွိေသးတယ္။ အဲဒီ့အတြက္ constructor ဆုိတာ ရွိလာတာပါပဲ။

What is a Constructor?
class constructor ဆုိတာ special function တစ္ခုပါ။ သူက ဘာလုပ္ေပးသလဲ ဆုိေတာ့ objects ေတြ create လုပ္ဖုိ ့အတြက္ လုိအပ္တဲ ့ data members ေတြကို initialize လုပ္ေပးနိုင္တဲ့ function ပါ။ objects မ်ိဳးစံုအတြက္ မတူညီတဲ ့ constructors မ်ိဳးစံု ပါ၀င္လုိ ့ရပါတယ္။

constructors ေတြအတြက္ name ေပးမယ္ဆုိရင္ class ရဲ ့ name ပဲ ေပးလုိ ့ရပါတယ္။ တစ္ျခား name ေပးလုိ ့မရပါဘူး။ အထက္က ပုစၧာ sample_02 မွာ ပါတဲ ့ CBox class ရဲ ့ constructor name က CBox() ဒီလုိျဖစ္ရပါမယ္။ အဲဒီ့ constructor function မွာ return type မလိုပါဘူး။ void လုိ ့ေတာင္ ေၾကျငာလို ့ မရပါဘူး။ constructor ရဲ ့ အဓိက လုပ္ငန္းက class အတြက္ လုိအပ္တဲ ့ data members ေတြကို initialize လုပ္ေပးတာပါပဲ။ ကဲ ေအာက္က ပုစၧာေလးကို ၾကည့္ရေအာင္။





How It Works
အဲမွာ အားလံုးေတြ ့ၾကတဲ့အတုိင္း constructor function တစ္ခု ေရးထားရံုနဲ ့ objects ေတြ မ်ားစြာကုိ initialize လုပ္ေပးနုိင္တဲ့အတြက္ main() function ထဲမွာ assignment(initialize) statements ေတြကို ရွုပ္ယွက္ခတ္ေအာင္ မေရးရေတာ့ဘူးေပါ့ ။ အဲဒီ့မွာ တစ္ခု သတိထားၾကည့္ပါ။ Output (cmd) screen မွာ "Constructor called." ဆုိတဲ့ စာေၾကာငး္ ႏွစ္ေၾကာင္းကုိ ေတြ ့ၾကပါလိမ့္မယ္။ အဲဒါက ဘာကို ဆုိလုိတာလဲဆုိေတာ့ constructor() function ကို ႏွစ္ခါေခၚထားကို ျပထားတာပါပဲ။ အဲဒီ့ output ကုိ ထုတ္စရာေတာ့ မလုိပါဘူး။ ျမင္သာေအာင္လုိ ့က်ေနာ္ ေရးျပတာပါ။ ဆုိလုိတာက object ႏွစ္ခုအတြက္ constructor() function ကို ႏွစ္ခါေခၚသံုးမယ္ေပါ့ေလ။ object အေရအတြက္အလုိက္ constructor() function ကုိ ေခၚသံုးထားမွာပါပဲ ။

The Default Constructor
အထက္က sample_03 မွာ က်ေနာ္တုိ ့ေနာက္ထပ္ object တစ္ခု ထပ္ ထည့္ၾကည့္ရေအာင္။ ဒီလိုေလးေပါ့။
CBox box2;
ဒီမွာ က်ေနာ္တုိ ့ဟာ box2 ကုိ initialize လုပ္မဲ့ values ေတြ မေပးခဲ့ၾကဘူး။ ဒါကုိ က်ေနာ္တုိ ့ build(compile) လုပ္လုိက္ရင္ ဒီ error တက္လာပါလိမ့္မယ္ ။
error c2512: 'CBox' : no appropritate default constructor available
ဒီ error ရဲ ့ဆုိလိုခ်က္က compiler (စကားခ်ပ္။ ။compiler အလုပ္လုပ္ပံု အေၾကာင္းကုိ Terminology and Definition in C++ ဆုိတဲ ့ topic ေအာက္မွာ ဖတ္ၾကည့္ုနိုင္ပါတယ္။) ဟာ default constructor() function ကုိ box2 အတြက္ ရွာေဖြပါတယ္။ အထက္က program ထဲမွာ default constructor အတြက္ မေရးထားပါဘူး။ အဲဒါေၾကာင့္ အဲဒီ့ error တက္ပါလိမ့္မယ္။ default constructor ဆုိတာကေတာ့ အခုလုိ ဘာမွ initialize values ေတြ မထည့္ေပးလုိက္တဲ့ object အတြက္ ရည္ရြယ္ၿပီး ေရးရတာပါ။ အဲေတာ့ ေရးလုိက္ၾကတာေပါ့ ။ အလြယ္ဆံုးပံုစံကေတာ့ ဒီလုိေလးပါပဲ။
CBox()
{ }
ဘာမွ မပါဘူး။ ဒါဆုိ ခုနက program မွာ က်ေနာ္တုိ ့ default constructor ကုိ သံုးၾကည့္ရေအာင္။
ဒါက class ရဲ ့ definition ပါ။



ဒါက main() body ရဲ ့ definition ပါ။



ဒါက output ပါ။



အဲဒီမွာ တစ္ခု ရွိေသးတာက box2 အတြက္ default constructor ရွိေနေပမဲ့လဲ initial values ေတြကို ထပ္ေၾကျငာ ေပးရေသးတယ္။ တကယ္လို ့ က်ေနာ္တုိ ့ဟာ CBox objects ေတြအတြက္ default size တစ္ခုကို (အဓိက initial value မေပးထားတဲ့ object အတြက္ေပါ့ေလ) ထားခဲ့မယ္ဆုိရင္ default constructor ကုိ သီးသန္ ့ မေရးေတာ့ပဲ ရိုးရိုး constructor ထဲမွာပဲ ေပါင္းေရးလို ့ရပါတယ္ ။ ေအာက္မွာ ထပ္ၾကည့္ၾကည့္ပါ။




ဒီ program မွာ default constructor ကုိ က်ေနာ္ အဓိက ေျပာခ်င္လုိ ့ box1 နဲ ့ cigarbox ကုိ ခ်န္ထားခဲ့ပါတယ္။ ၿပီးေတာ့ CBox constructor ရဲ ့ parameter သံုးခု (lv, bv, hv) တို ့ကို က်ေနာ့္အေနနဲ ့ အၾကမ္းဖ်ဥ္း default values ေတြကို 2 နဲ ့ သံုးျပထားပါတယ္။ ဒါေၾကာင့္ output က 8 ပါ။ default values ေတြကုိ ၾကိဳက္ရာ တန္ဖုိးအတိုင္း ေျပာငး္လဲ အသံုးျပဳၾကပါ။

trace လုိက္ၾကည့္ပါ။
ဒီေလာက္ဆုိ Constructors ေတြ အေၾကာငး္ သေဘာေပါက္ေလာက္ၿပီ ထင္ပါတယ္ ... constructor ေတြကုိ အသံုးျပဳဖုိ ့က လုိကို လိုအပ္ပါတယ္။ constructor နဲ ့ ပါတ္သတ္လုိ ့က်ေနာ္ ဒီေလာက္ပဲ ေျပာပါရေစ ...လိုအပ္တာကို ထပ္ၿပီး ေမးျမန္းေပးပါ ခင္ဗ်ာ ...


To Be Continued ♠♥♦♣

Last edited by green leaf; 01-05-2009 at 10:00 PM..
green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 8 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 20-04-2009, 09:36 PM
  post #8
heainhtunoo
အရြယ္ေရာက္သူ
 
heainhtunoo's Avatar
 
အသင္း၀င္ေန႔စြဲ: Aug 2008
ေရးသားခ်က္မ်ား: 144
ေက်းဇူးတင္စကား: 166
ပို႔စ္ 105 ခုအတြက္ 420 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
heainhtunoo is on a distinguished road
ျပန္စာ - classes in C++

ကုိ green leaf အရမ္းေက်းဇူးတင္တယ္ဗ်ာ ..
တကယ္ေျပာတာပါ ကြၽန္ေတာ္ဆရာ(အစ္ကုိ)သင္တာမရွင္းလို႕ေက်းဇူးပါ..
ကြၽန္ေတာ္အကုန္ဖတ္လိုက္ရတယ္..
heainhtunoo is offline   Reply With Quote
Old 30-04-2009, 10:13 PM
  post #9
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
ျပန္စာ - classes in C++

sorry ပဲဗ်ာ....က်ေနာ္ ဆက္မေရးျဖစ္တာ ေတာ္ေတာ္ၾကာသြားတယ္....ၾကားထဲမွာ သၾကၤန္ခံသြားတာရယ္..ဖ်ားေနတာရယ္ေၾကာင့္.. ဆက္မေရးျဖစ္ဘူး...ဒီ C++ programming နဲ ့ပတ္သတ္လုိ ့ တစ္ေယာက္ပဲျဖစ္ပါေစ.. အက်ိဳးရွိမယ္ဆုိ က်ေနာ္ ေရးရက်ိဳးနပ္ပါတယ္....တစ္ခု က်ေနာ္ဆႏၵရွိတာေလး ေျပာပါရေစ...က်ေနာ္ ေတြ ့မိတဲ့ C++ forum ေတြမွာ ေဆြးေႏြးခ်က္ေတြက အမ်ားၾကီးပဲဗ်... တစ္ေယာက္ေယာက္က post တစ္ခုတင္လိုက္ရင္ အဲဒါကိုပဲ ေနာက္ထပ္ ၀င္ေဆြးေႏြးေပးတဲ့ သူေတြ အမ်ားၾကီးပဲ.. အင္း က်ေနာ္လဲ ျမန္မာ မိသားစုထဲမွာ C++ programming ကြ်မ္းက်င္မဲ့သူေတြ အမ်ားၾကီး ရွိမယ္ဆုိတာ က်ေနာ္ ယံုၾကည္ပါတယ္...ဒါေပမဲ ့ ဘယ္သူမွ ၀င္မေဆြးေႏြးဘူးျဖစ္ေနတယ္... အဲေတာ့ က်ေနာ္ဆႏၵရွိတာေလးက မိမိသိတာေလးေတြ၊ program တစ္ပုဒ္မွာျဖစ္ျဖစ္ စဥ္းစားပံု စဥ္းစားနည္းေတြ ကြ်မ္းက်င္တဲ့သူမ်ား ၀င္ေဆြးေႏြးေပးေစခ်င္တာေပါ့ေလ.. ဒါဟာ ေနာင္ တက္လာမဲ့ လူငယ္ေတြအတြက္ အဆင္သင့္ျဖစ္ေနမယ္ေလ...

က်ေနာ့္ ကုိ ဆရာ၀င္လုပ္တယ္လုိ ့လဲ မထင္ေစခ်င္ပါဘူး.... ျမန္မာ မိသားစုထဲ ၀င္လာတာ မၾကာေသးဘူး.. ၾကီးၾကီးက်ယ္က်ယ္ ေလွ်ာက္ေျပာေနတယ္လုိ ့ေတာ့ မထင္ေစခ်င္ပါဘူး...က်ေနာ္ ေရးထားတာလဲ ၂ ပုဒ္လားပဲ ရွိပါေသးတယ္... က်ေနာ္ သိသမွ် အားလံုး ခ်ျပထားတာပါပဲ...က်ေနာ္ကေတာ့ beginner level ပဲ ရွိပါေသးတယ္.. က်ေနာ္သိသမွ် အဲတာ အကုန္ပါပဲ.. က်ေနာ္ ခုေရးထားသမွ်ထက္ က်ေနာ္ ဘာမွ ပုိမတတ္ကြ်မ္းေသးပါဘူး... အဲေတာ့ က်ေနာ့္ဆီမွာ မွားယြင္းတဲ့ ယူဆခ်က္ေတြ ရွိရင္လဲ သြန္သင္ေပးေစခ်င္ပါတယ္...

ေနာက္ က်ေနာ္စဥ္းစားမိတာက ျမန္မာမိသားစုထဲက အစ္ကိုအစ္မ ေတြ C++ programming ကုိ စိတ္မ၀င္စားလုိ ့လား ..ဒါမွမဟုတ္ မိမိသိသမွ် C++ programming ကို share မေပးခ်င္လို ့လား .. ဒါမွမဟုတ္ရင္ေတာ့ က်ေနာ္တင္တဲ့ ပုိ ့စ္ေတြကပဲ အက်ိဳးမျပဳလို ့ပဲ ျဖစ္ရမယ္.... က်ေနာ္ စဥ္းစားမိတာပါ...စဥ္းစားမိတာပါ..

အဓိကကေတာ့ က်ေနာ္က ျမန္မာမိသားစုထဲက အစ္ကုိအစ္မေတြဆီက C++ programming နဲ ့ ပတ္သတ္လုိ ့ ပညာယူခ်င္လုိ ့ အခုလုိႏွိဳးေဆာ္ေပးတာပါ....၀င္ေရာက္ ေဆြးေႏြး ေပးၾကပါ... ဒီတစ္ရက္ ႏွစ္ရက္အတြင္း က်ေနာ္ ေနာက္ထပ္ ပို ့စ္ ေတြ ဆက္တင္ပါမယ္... ခု က်ေနာ္ေရးထားတာေတြနဲ ့ ပတ္သတ္လို ့ တစ္စံုတစ္ေယာက္အတြက္ စိတ္အေႏွာင့္အယွက္ ျဖစ္ခဲ့ရင္ ဒီေနရာကပဲ က်ေနာ္ ေတာင္းပန္လုိက္ပါတယ္... အားလံုးပဲ ေပ်ာ္ရႊင္ပါေစ....

Last edited by green leaf; 30-04-2009 at 10:23 PM..
green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 11 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 01-05-2009, 09:23 PM
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
ျပန္စာ - classes in C++

Destructor, this Pointer and Overloaded Operator Function


ဒီေန ့ေတာ့ destructors ေတြအေၾကာင္းနဲ ့ တစ္ျခား သိသင့္သိထုိက္တာေလးေတြ ေျပာမလို ့ ရည္ရြယ္ပါတယ္။ C++ programming ဟာ compiler နဲ ့ အသံုးျပဳရတဲ့ software ေတြျဖစ္တယ္။ compiler မတူညီတဲ့အေပၚ မူတည္၍ program ေရးတဲ့ software ေတြ ေျပာငး္လဲမွု ရွိသလုိ program ေရးသားရာမွာ syntax (ေရးထံုးေရးနည္း) ေတြ ေျပာင္းလဲ မွု ရွိပါတယ္။

က်ေနာ္ အသံုးျပဳေနတဲ့ software က microsoft ကထုတ္တဲ့ Microsoft Visual Studio 2008 Team System ျဖစ္ပါတယ္။ က်ေနာ္ေရးထားတဲ့ program ေတြကုိ Visual Studio 2005 မွာ သြား run ရင္ မရပါဘူး။ syntax မတူလို ့ပဲ ျဖစ္ပါတယ္။ အဲဒီ့မွာ Visual C++ ဆုိတဲ့ စကားလံုးကုိ ခင္ဗ်ားတုိ ့လဲ ေတြ ့ဖူးၿပီးသား ျဖစ္ပါလိမ့္မယ္။ အဲဒါဟာလဲ microsoft က ထုတ္တဲ့ visual လို ့အမည္ရတဲ့ compiler ေၾကာင့္ျဖစ္ပါတယ္။ သူကေတာ့ ၾကီးမားတဲ့ applications ေတြ ေရးရာမွာ အဆင္ေျပေစဖုိ ့ special tools ေတြ အဆင္သင့္ ထည့္ေပးထားတဲ့ compiler ပါပဲ။ compiler ဘယ္လုိအလုပ္လုပ္သလဲ ဆုိတာကုိ http://www.myanmarfamily.org/forum/s...ad.php?t=13568 မွာ က်ေနာ္ အနဲငယ္ ေျပာျပထားပါတယ္။ ကိုမိုးလြင္လဲ ၀င္ ေဆြးေႏြးေပးထားပါတယ္။

ဘာ software ပဲ သံုးသံုး၊ ဘယ္ compiler ကုိပဲ သံုးသံုးပါ။ syntax အနဲငယ္ ကြဲသြားတာပဲ ရွိပါမယ္။ program တစ္ပုဒ္ကုိ စဥ္းစားပံု စဥ္းစားနည္း၊ logic ေတြကေတာ့ ဘာမွ မေျပာင္းလဲပါဘူး။ (ဥပမာ http://www.myanmarfamily.org/forum/s...ad.php?t=10012 ထဲမွာ သူငယ္ခ်င္း ေမာင္ရိုး တင္ထားတဲ့ Dev-C++ software နဲ ့လဲ ေရးလဲ အတူတူပါပဲ )က်ေနာ့္အေနနဲ ့ Microsoft Visual Studio 2008 Team System software ကုိ upload တင္ေပးခ်င္ပါတယ္။ 4 GB ေလာက္ ရွိတယ္။ Copy Right ေတြနဲ ့ ညိနိုင္မလား မသိဘူး။ ဖုိရမ္ အုပ္ခ်ဳပ္သူမ်ားအေနနဲ ့ ဒီပုိ ့စ္ေလးကုိ ၀င္ဖတ္မိရင္ upload တင္လုိ ့ ရ၊မရ၊ ရမယ္ဆုိရင္လဲ ဘယ္လုိလုပ္ရမလဲဆုိတာ ေျပာျပေပးေစခ်င္ပါတယ္။ ဒီ visual studio 2008 နဲ ့ဆုိရင္ VC++, VC#, VB, MFC, Windows Forms စသည္ျဖင့္ စံုစံုလင္လင္ အသံုးျပဳနိုင္ပါတယ္။

Classes ေတြကုိ အနဲငယ္ ျပန္ၾကည့္ရေအာင္။ classes ဆုိတာ own data types ေတြဆုိတာ သိၿပီးသြားၿပီေနာ္..
classes ရဲ ့ data members ေတြ function members ေတြ၊ constructors အသံုးျပဳပံုေတြ က်ေနာ္တုိ ့ သိၿပီးသြားၿပီ။ အခု destructors ေတြအေၾကာင္း အနည္းငယ္ ၾကည့္ရေအာင္.....

Destructors
ိိdestructor ဆုိတာ function တစ္ခုပါ။ ဒီေတာ့ ဘာလုပ္တဲ့ function လဲ ? သူက objects(instances) ေတြကုိ အသံုးျပဳဖုိ ့မလုိတဲ့အခါ ဒါမွမဟုတ္ သူအသံုးျပဳတဲ့ scope ကေန ေက်ာ္လြန္သြားတဲ့အခါ အဲဒီ့ objects ေတြကို destroy လုပ္ေပးတဲ့ function ပါ။ ဒီအေျခအေနမွာ objects ေတြရဲ ့ data members ေတြ ေနရာယူထားတဲ့ memory ေတြကုိ free လုပ္ျခင္းတုိ ့ပါ ပါ၀င္ပါတယ္။ (မွတ္ခ်က္။ ။static members ေတြ မပါ). သူလဲ constructors ေတြလုိပဲ return type မလုိဘူး၊ parameter lists ေတြမလုိဘူး၊ constructors ေတြလိုပဲ class ရဲ ့ name ကုိ function name အျဖစ္ ထားရတာပါပဲ.. တစ္ခုပါပဲ constructor နဲ ့ကြာျခားတာက destructor name မတုိင္ခင္ ေရွ့မွာ ဒီ သေကၤတ (~) ေလး ထည့္ေပးရတာပါပဲ.. ေအာက္မွာ ၾကည့္ၾကည့္ပါ....

~CBox()
{ }

ဒါပါပဲ destructor ဆုိတာ... ကဲ က်ေနာ္တုိ ့ ဥပမာ တစ္ပုဒ္ေလာက္ ၾကည့္ရေအာင္....




output ကေတာ့ ဒီအတုိင္းေလးပါ...



How It Works
အေျခအေနကို လုိ္က္ၿပီးေတာ့ destructor နဲ ့ destroy လုပ္လို ့မရတဲ ့ object ေတြလဲ ရွိတာေပါ့ေလ.. ဒါကိုေတာ့ ေနာက္ ေျပာစရာ ၾကံဳၾကိဳက္မွ ေျပာလို ့ေကာင္းမယ္ထင္တယ္... ခုကတညး္ကေျပာလုိက္ရင္ မွတ္ထားရတာ ရွုပ္ေနမယ္...

ဒီ program ရဲ ့ output မွာ Destructor called. ဆုိတဲ့ စာေၾကာင္းဟာ ျမင္သာေအာင္လုိ ့ေရးျပေပးထားတာပါ... destructor function ကုိ ၇ ၾကိမ္ call ေခၚထားတဲ့အေၾကာင္း သိသာေအာင္လုိ ့ပါ.. ကဲ က်ေနာ္တုိ ့ အေပၚကေနစၿပီး ဒီ program ကုိ analysis လုပ္ၾကည့္ရေအာင္...

class ထဲမွာ ပထမ function က destructor function ..ဒုတိယ function က constructor function .. အဲဒါေတြက ဘာမွ ထပ္ေျပာစရာ မရွိေတာ့ဘူး.. အားလံုး နားလည္ၿပီလုိ ့ပဲ က်ေနာ္ ယူဆလုိက္တယ္..

တတိယ function က Volume() function ...အဲမွာ ၾကည့္ရေအာင္.. function declaration ရဲ ့ ေနာက္ဆံုးမွာ const ဆုိတဲ ့ keyword ကုိ တစ္္ခ်က္ၾကည့္ရေအာင္... constant ျဖစ္ပါတယ္.. const ကုိ သံုးထားတဲ့ အတြက္ အဲဒီ့ function ကုိ ထပ္မံ modify လုပ္လုိ ့မရေတာ့ပါဘူး.. လုိအပ္တဲ့ ေနရာမွာ အသံုးျပဳၾကပါ...

ေနာ္က္ဆံုး function က compare() function ... အဲဒါက နဲနဲ ေျပာစရာေလးေတြ ရွိပါတယ္... ဒီ function ရဲ ့ ရည္ရြယ္ခ်က္က objects(instances) ေတြကုိ compare ႏွိုင္းယွဥ္ ခ်င္တာေပါ့ေလ...ဘယ္သူၾကီးတယ္..ဘယ္သူငယ္တယ္ ေပါ့... ဥပမာဗ်ာ။ ။ 3 > 2 ဆုိရင္ က်ေနာ္တုိ ့ဟာ 3 ဟာ ၾကီးၿပီး 2 ဟာ ငယ္တယ္ဆုိတာ အလြယ္တကူ သိနိုင္တယ္ေလ.. ဒါေပမဲ့ objects ေတြက်ေတာ့ ဘယ္သူၾကီးတယ္ ဘယ္သူငယ္တယ္ဆုိတာ အလြယ္တကူ မသိနုိင္ဘူးေလ.. ဒါေၾကာင့္ ဒီလုိ function တစ္ခု ေရးေပးရပါတယ္... ဒီလုိ function မ်ိဳးကုိ operator overloaded function လုိ ့ ေခၚပါတယ္။ ဒီလုိ overload function ေတြကုိ အသံုုးၿပဳၿပီးေတာ့ objects ေတြကုိ ေပါငး္နုိင္တယ္၊ နုတ္နုိင္တယ္၊ စားနုိင္တယ္၊ ေျမွာက္နုိင္တယ္၊ အခုလို compare လုပ္နုိင္တယ္.. ေနာက္ထပ္ မ်ားစြာ လုပ္နုိင္ပါေသးတယ္

အဲဒီ့မွာ this ဆုိတဲ့ keyword ကုိ ၾကည့္လိုက္ပါ... အဲဒီ့ this ဟာ pointer ပါ.. this pointer လုိ ့ေခၚတာေပါ့ေလ.. this pointer က main() function ကေန က်ေနာ္တုိ ့ နိွု္င္းယွဥ္ခ်င္တဲ့ object ႏွစ္ခုကုိ passed ေပးလုိက္တဲ့ အခါ သူက ပထမ object ကုိ ယူလုိက္ပါတယ္.. အင္း ရွုပ္သြားမလား မသိဘူး .. ဥပမာ ဗ်ာ.. ဒီလုိေပါ့...

match.compare(pB1)

အဲဒီ့မွာ ရွင္းေအာင္ ဒီလုိ ၾကည့္လုိက္ပါ...

{ return match.Volume() > pB1.Volume(); }

ဒါဆို ရွင္းသြားမယ္ထင္တယ္..(အဲလုိ ေရးထားတာ မမွန္ဘူးေနာ္...သေဘာကုိ ရွင္းေအာင္ ေရးထားတာ) အဲဒီ့ေတာ့ this pointer က match object ကုိ ရည္ညႊန္းလိုက္တာပါ.. cigar object ကုိလဲ pointer name pB1 နဲ ့ assign လုပ္ထားပါတယ္... this နဲ ့ pB1 နဲ ့ Volume() function အၾကား ဆက္သြယ္ခ်က္ကုိ ဒီသေကၤတ -> နဲ ့ ျပထားပါတယ္... သာမန္အားျဖင့္ က်ေနာ္တုိ ့ဟာ ဒီသေကၤတ direct access operator(direct selection operator) . ကုိ အသံုးျပဳပါတယ္.. ခုက object ႏွစ္ခုလံုးဟာ pointers မ်ားနဲ ့ ရည္ညႊန္းထားတဲ့အတြက္ direct access operator နဲ ့ အသံုးျပဳလုိ ့မရပါဘူး... Indirect access operator(Indirect selection operator) -> နဲ ့အသံုးျပဳရပါတယ္... ၿပီးေတာ့ function declaration မွာ အသံုးျပဳထားတဲ့ const ဟာ ဒီ this pointer ကုိ ရည္ရြယ္ၿပီး ေရးထားတာပါ...

ဒါနဲ ့ အေပၚက program မွာ overloaded operator function ကုိ ေရးပဲ ေရးထားတာပါ...အသံုးမျပဳထားပါဘူး.. ခု ဒီေအာက္က code နဲ ့ main() function ထဲမွာ ထည့္ၿပီး run ၾကည့္လုိက္ပါ.. နားလည္သြားပါလိမ့္မယ္....



ဒါဆုိရင္ output က ဒီအတုိငး္ ျဖစ္သြားပါလိမ့္မယ္...



နိဂံုး
destructor အေၾကာင္းကေတာ့ ဒီေလာက္ပါပဲ ခင္ဗ်ာ.. နားမလည္တာ ရွိရင္ ျပန္ေမးေပးပါ.. overloaded operator function နဲ ့ပတ္သတ္ရင္ စာျမည္းသေဘာေလာက္ပဲ ပါပါတယ္...ေနာက္ အခ်ိန္ရရင္ သက္သက္ ေခါင္းစဥ္ခြဲၿပီး ေဆြးေႏြးေပးသြားပါမယ္.... ေနာက္ထပ္ classes ေတြနဲ ့ ပါတ္သတ္လုိ ့ copy constructor, static member function, union, inline function, friend function, class templates နဲ ့ အဓိကကေတာ့ Class Inheritance ပါပဲ... Inheritance ဆိုတာက မ်ိဳးရိုးဆင္းသက္မယ္ေပါ့ဗ်ာ... အဲလုိပဲ classes ေတြကိုလဲ parent classes ေတြနဲ ့ child classes ေတြ လုပ္ၾကမယ္ေပါ့ဗ်ာ... က်န္တဲ့ဟာေတြကိုေတာ့ က်ေနာ္အဲေလာက္ စိတ္မ၀င္စားပါဘူး.. ဒါေပမဲ့ Class Inheritance နဲ ့ ပတ္သတ္လုိ ့ေတာ့ က်ေနာ္ ေသေသခ်ာခ်ာေလး ေဆြးေႏြး ေပးပါမယ္... သူက အလြန္ပဲ စိတ္၀င္စားဖုိ ့ေကာင္းပါတယ္...



To Be Continued ♥♦

Last edited by green leaf; 14-05-2009 at 04:29 AM..
green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 7 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 10-05-2009, 05:41 AM
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
ျပန္စာ - classes in C++

က်ေနာ့္အေနနဲ ့ classes နဲ ့ပါတ္သတ္ၿပီး ေရွ့ဆက္မသြားခင္ sample ပုစ ၦာေလးေတြ(examples) ေပါ့ေလ... ခုထိ ဖတ္ၿပီးသားေတြသူေတြထဲမွာလဲ ဒီ C++ programming ကုိ အနဲငယ္ေလာက္ပဲ သိေသးတဲ့သူေတြလဲ ပါေကာင္းပါနုိင္တယ္ေလ...ဒီေတာ့ class အေၾကာင္းဆုိေတာ့ တစ္ခ်ိဳ ့အေနနဲ ့အလြယ္တကူ နားလည္ခ်င္မွ နားလည္နိုင္မယ္... ဒီေတာ့ က်ေနာ့္အေနနဲ ့ samples ပုစ ၦာေလးေတြ (က်ေနာ္ေရးထားတာေလးေတြပါ) ၄၊ ၅ ပုဒ္ေလာက္ တင္ေပးရမလားလို ့စဥ္းစားမိလုိ ့ပါ...အမွန္က က်ေနာ္ တင္မယ္ဆုိၿပီး တစ္ပုဒ္ႏွစ္ပုဒ္ေလာက္ ေရးၿပီးေနၿပီ... ၿပီးေတာ့မွ စဥ္းစားမိလုိ ့ အကယ္၍ မလိုအပ္ဘူးဆုိရင္ အလကားေနရင္းနဲ ့ post ေတြေဖာင္းပြမွာရယ္၊ တင္ရမယ္ဆုိရင္ စာမ်က္ႏွာကလဲ ေတာ္ေတာ္ ရွည္သြားနုိင္မွာရယ္.. ေတြးမိလို ့ အခုလုိ ၾကိဳတင္ေမးၾကည့္တာ..... အဲဒီ့ေတာ့ လုိခ်င္တဲ့သူမ်ား ဘယ္ႏွေယာက္ေလာက္ ရွိမလဲ... က်ေနာ္တင္ေပးမယ္ဆုိတာက သခ်ာၤဆုိင္ရာ ပုစ ၦာေလး ေတြပါပဲ...လုိခ်င္တဲ့သူမ်ား ရွိရင္ က်ေနာ့္ကုိ တစ္ခ်က္ေလာက္ ေျပာေပးပါ...အမ်ားၾကီးလဲ reply မလုပ္ၾကပါနဲ ့..တစ္ေယာက္ေလာက္ဆုိ လံုေလာက္ပါၿပီ...ေတာ္ၾကာ အထက္က ပုိ ့စ္ေတြနဲ ့ အဆက္ျပတ္သြားမွာစိုးလို ့...

Be Regard..

Last edited by green leaf; 13-05-2009 at 06:05 PM..
green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 3 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 10-05-2009, 09:36 PM
heainhtunoo
အရြယ္ေရာက္သူ
 
heainhtunoo's Avatar
 
အသင္း၀င္ေန႔စြဲ: Aug 2008
ေရးသားခ်က္မ်ား: 144
ေက်းဇူးတင္စကား: 166
ပို႔စ္ 105 ခုအတြက္ 420 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
heainhtunoo is on a distinguished road
ျပန္စာ - classes in C++

ကို green leaf classes နဲ႔ပတ္သက္တဲ႔အေၾကာင္းကို လြယ္ကူနားလည္ႏိုင္တဲ႕ သခ်ာၤပုစာၦေလးတင္ေပးေစလိုပါတယ္
တစ္ပုဒ္ ၊ႏွစ္ပုဒ္ ေလာက္ပါပဲ
ကြၽန္ေတာ္လည္းတင္ခ်င္ပါတယ္ ...ဒါေပမဲ႕ အမွားပါရင္အားနာစရာေကာင္းမွာဆိုးလို႕ပါ
ေက်းဇူးပါ.........
heainhtunoo is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 4 ဦးတို႔မွ heainhtunoo အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 14-05-2009, 03:52 AM
green leaf
ဆယ္ေက်ာ္သက္
 
အသင္း၀င္ေန႔စြဲ: Apr 2009
ေရးသားခ်က္မ်ား: 70
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 197
ပို႔စ္ 63 ခုအတြက္ 507 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
green leaf is on a distinguished road
ျပန္စာ - classes in C++

Class Samples

/*sorry ဗ်ာ... နဲနဲၾကာသြားတယ္...အလုပ္ေလး နဲနဲ ရွုပ္ေနလို ့ပါ...စိတ္ကေတာ့ ေရာက္ပါတယ္...ကဲဗ်ာ စကားေတြ ရွည္ေနမယ္... က်ေနာ္ဆႏၵရွိသလုိ samples ေလးေတြေပ့ါေလ... တစ္ခ်က္ေလာက္ ၾကည့္ၾကည့္ရေအာင္... က်ေနာ္ ရည္ရြယ္တာကေတာ့ beginner level ေတြ နားလည္ေအာင္ရယ္၊ စဥ္းစားပံု စဥ္းစားနည္းေတြ သိေစခ်င္တာပါ... ရိုးရိုးရွင္းရွင္း ပုစ ၦာေလးေတြပါပဲ... */

sample_001
ဂဏန္းသံုးလံုးကုိ maximum, minimum ရွာတာ ၾကည့္ၾကည့္ရေအာင္....ပထမဆံုး variables သံုးလံုးကုိ declare လုပ္မယ္.. ၿပီးရင္ အဲဒီ့ဂဏန္းသံုးလံုးအတြက္ input ကုိ user ဆီကေန ေတာင္းမယ္္... ၿပီးေတာ့ ပထမဂဏန္း တစ္လံုးကုိ တစ္ျခား ေနာက္ထပ္ variable(max) တစ္ခုထဲကုိ assign လုပ္လုိက္တယ္... ဒါဆုိ အဲဒီ့ max ဆုိတဲ့ variable ထဲမွာ ဂဏန္းတစ္လံုး ရွိေနၿပီ.. ၿပီးေတာ့မွ သူနဲ ့ ေနာက္ထပ္ ဂဏန္းတစ္လံုးနဲ ့ ႏိွဳင္းယွဥ္တယ္... ဒုတိယဂဏန္းက ၾကီးမယ္ဆုိရင္ max ထဲကုိ ၀င္သြားၿပီး ပထမရွိေနတဲ့ ဂဏန္းကုိ ဖယ္ၿပီးေတာ့ သူက အစား၀င္လိမ့္မယ္... မဟုတ္ခဲ့ရင္ေတာ့ ပထမဂဏန္းက max ထဲမွာ ဆက္လက္တည္ရွိေနဦးမယ္... အဲဒီ့အဆင့္ ၿပီးသြားရင္ max က တတိယဂဏန္းနဲ ့ ဆက္လက္ႏိွုင္းယွဥ္တယ္... တတိယဂဏန္းက max ထဲမွာ ရွိေနတဲ့ ့ဂဏန္းထက္ၾကီးမယ္ဆုိရင္ max ထဲကို ၀င္သြားမယ္... မဟုတ္ခဲ့ရင္ေတာ့ max ထဲမွာ ရွိေနတဲ့ ဂဏန္းကပဲ ဆက္လက္တည္ရွိေနမွာ ျဖစ္ပါတယ္.... ဒါဆုိ ေအာက္က code ေလးကုိ ၾကည့္လုိက္ပါ...



output ကေတာ့ ေအာက္က အတုိင္းပါပဲ



How It Works

အထက္မွာ ရွင္းၿပီးၿပီ ဆုိေတာ့ ဘာမွ ထပ္ေျပာစရာ မရွိပါဘူး... ဒါေပမဲ ့ က်ေနာ္တို ့ တစ္ခု သတိထားရမွာက programmer က ကုိယ့္အတြက္ ေတြးၿပီး ေရးလုိ ့မရဘူး... အျမဲတမ္း သူမ်ားအတြက္ ၾကည့္ၿပီး ေရးေပးရမယ္.. ခု program မွာလဲ က်ေနာ္တုိ ့maximum ေရးထားတာ မွန္ပါတယ္... ဒါေပမဲ့ user က ဂဏန္းသံုးလံုးကုိ အတူတူ ေပးလုိက္ရင္ ဘယ္ႏွယ့္လုပ္မလဲ...(ဥပမာ.. 2,2,2 ) ပဲ ဆုိပါေတာ့... ဒါဆုိ maximum ဂဏန္းမရွိဘူးေလ... ဟုတ္တယ္မုိ ့လား.. အဲဒီ့အတြက္ က်ေနာ္တို ့ထပ္ျဖည့္ေပးရမယ္ေလ.. ဂဏန္းေတြ ညီခဲ့ရင္ ဘာျဖစ္မလဲ ေပါ့... ကဲ ဒါဆုိ ဒီလုိ ထပ္ျဖည့္ၾကည့္ရေအာင္...






ကဲ အဲဒါဆုိ အဆင္ေျပသြားၿပီ... ဒါဆုိ က်ေနာ္တုိ ့ ရည္မွန္းခ်က္ျဖစ္တဲ့ class ကုိ ေရြ ့ရေအာင္... ဒီပုစ ၦာကုိပဲ class နဲ ့ ေရးၾကတာေပါ့.. code ကေတာ့ ေအာက္္မွာ ၾကည့္ၾကည့္ပါ...






How It Works
output ကေတာ့ ျမင္တဲ့အတုိင္းပဲ ႏွစ္ခု ထုတ္ျပထားပါတယ္... တစ္ခုက maximum အတြက္၊ တစ္ခုက equal အတြက္ .... ဒါဆုိ အရိုးရွင္းဆံုး math ပုစ ၦာတစ္ပုဒ္ကုိ class နဲ ့ ေရးလုိ ့ၿပီးပါၿပီ... ဒီပုစ ၦာမွာ ေရးထားတဲ ့ class နဲ ့ ပါတ္သတ္ၿပီး ထပ္ေျပာဖုိ ့မလိုဘူး ထင္ပါတယ္.. ဘာမွ အထူးအျခား မပါပါဘူး... အေပၚမွာ ေျပာျပထားခဲ့တဲ့ အေၾကာင္းအရာေတြပါပဲ....constructor() function ရယ္၊ maximum ရွာမဲ့ function ရယ္၊ ဂဏန္းေတြ ညီခဲ့ရင္ ဆုိတဲ့ IsEqual() function ရယ္ပါပဲ... က်ေနာ္ျမင္တာေတာ့ ဘာမွ ထပ္ရွင္းျပစရာ မလုိဘူး ထင္တာပဲ... လုိအပ္ရင္ေတာ့ ေျပာပါ... IsEqual() function ကုိေတာ့ ေသခ်ာေလး ၾကည့္ၾကည့္ေပါ့ဗ်ာ ... bool type ကုိ အသံုးျပဳထားတာေလးကို ေျပာတာပါ....

ဒါေပမဲ ့ဒါဟာ ရိုးရိုးပုစ ၦာပါ... ေနာက္လာမဲ့ ပုစ ၦာကေတာ့ ဒီပုစ ၦာကိုပဲ array နဲ ့ ေရးျပမွာပါ... ခဏေန ဆက္ေရးပါမယ္... ခုေလာေလာဆယ္ ဗုိက္ဆာလို ့စားလုိက္ဦးမယ္ဗ်ာ ... တစ္စံုတစ္ေယာက္အတြက္ အသံုး၀င္မယ္ဆုိရင္ က်ေနာ္ ေက်နပ္ပါတယ္... အင္း တစ္ခုေျပာဖို ့ က်န္ေသးတယ္.... class ေတြ အသံုးျပဳေတာ့မယ္ဆုိရင္ function ကုိ မသိလို ့မျဖစ္ပါဘူး။ function နဲ ့ပတ္သတ္လုိ ့က်ေနာ္ သပ္သပ္ ေရးဖို ့ စဥ္းစားထားပါတယ္...


ကဲ ဗိုက္ျပည့္သြားေတာ့လဲ အလုပ္ေလး ဆက္လုပ္တာေပါ့ဗ်ာ... အေပၚက program ကုိပဲ array နဲ ့ ေရးမယ္ဆုိရင္ နဲနဲေတာ့ ေခါင္းစားရတာေပါ့ဗ်ာ... ခင္ဗ်ားတုိ ့လဲ လြယ္တာေလးေတြ မလုပ္ခ်င္ဘူးမုိ ့လား.. က်ေနာ္သိပါတယ္... ဘာမွေတာ့လဲ မဟုတ္ပါဘူး... ကဲ ေအာက္က codes ေလးေတြကို ၾကည့္ၾကည့္ပါ...






How It Works
သူ ဘယ္လုိ အလုပ္လုပ္သလဲ ??? ပထမဦးဆံုး class name ကုိေတာ့ maximum, minimum ရွာဖုိ ့အတြက္ဆုိၿပီးေတာ့ က်ေနာ္ကေတာ့ CMax ဆုိၿပီး နာမည္ေပးလိုက္တယ္... ခင္ဗ်ားလဲ ၾကိဳက္တဲ့နာမည္ ေပးပါ... ခင္ဗ်ား ရည္းစားနာမည္ေပးလဲ ဘာျပသနာမွ မရွိပါဘူး members အားလံုးကို public နဲ ့ access ေပးထားတဲ့ အတြက္ ဘာျပသနာမွ မရွိပါဘူး... တစ္ဆင့္ခ်င္းစီ ၾကည့္သြားရေအာင္.. ဒါေၾကာင့္ က်ေနာ္ line နံပါတ္ေတြ ထုိးထားပါတယ္..

ပထမဦးဆံုး သိထားရမွာက class ရဲ ့ member function ေတြ အားလံုးကုိ class definition ထဲမွာ declare ပဲ လုပ္ၿပီး class ရဲ ့ ျပင္ပမွာ အကုန္ထုတ္ေရးထားပါတယ္... ဒါက class ကုိၾကည့္လိုက္တာနဲ ့ ဘာကိုေရးထားတယ္ ဆုိတာ သိသာေစဖုိ ့ျဖစ္ပါတယ္... ဒါေၾကာင့္ class အျပင္မွာ ျဖစ္တဲ့အတြက္ ဒါေတြဟာ class ရဲ ့ ပိုင္ဆုိင္မွု၊ ဆက္ႏြယ္မွုလုိ ့သိသာေစဖုိ ့၊ common functions ေတြနဲ ့ ကြဲျပားေစဖုိ ့အတြက္ အဲဒီ့ function name ေတြရဲ ့ ေရွ့ကေန class name ကုိေရးၿပီး ၾကားထဲက ဆက္သြယ္မွုကိုေတာ့ : : (scope resolution operator) ထည့္ေပးထားရပါတယ္...
  • line 11 မွာ array name ကုိ yy လုိ ့ေပးၿပီး size ကုိေတာ့ 10 ေပးထားပါတယ္.. array size ကုိ ခင္ဗ်ား သေဘာက်သေလာက္ ျပန္ျပင္ပါ.. အဆင္ေျပပါတယ္..
  • line 12 မွာ default constructor() function ပါ.. default constructor ကုိ line 71 မွာ ရွိတဲ့ object ( object name: obj_2 ) အတြက္ ရည္ရြယ္ၿပီး ေရးေပးရတာပါ... အကယ္၍ default constructor() function() မေရးခဲ့ရင္ compiler ကေန ဒီ error ျပပါလိမ့္မယ္...
    error C2512: 'CMax' : no appropriate default constructor available
  • line 13 မွာလဲ constructor() function ပါပဲ... သူကေတာ့ line 70 မွာ ေရးထားတဲ့ object (object name: obj_1) အတြက္ ရည္ရြယ္ပါတယ္...
  • line 14 မွာက destructor function() ပါ... ဒီအေပၚက ပုိ ့စ္မွာပဲ ရွင္းထားလို ့ ထပ္မေျပာေတာ့ပါဘူး... objects ေတြကို destroy လုပ္ေပးတာပါ....
  • line 15 ကေန line 19 ကေတာ့ အသံုးျပဳမဲ ့ function() ေလးေတြကုိ declaration( function prototype) လုပ္ထားတာပါ..
  • က်န္တာေတြေတာ့ အေသးစိတ္ မရွင္းေတာ့ပါဘူး.. ခင္ဗ်ားလဲ နားလည္ၿပီးတာေတြပါ.. အဲဒီမွာ array ကုိ တြက္ေနတယ္ဆုိတာ က်ေနာ္တုိ ့ ေမ့ေလ်ာ ့လုိ ့မရပါဘူး... array ျဖစ္တဲ ့အတြက္ ဘယ္ေနရာမွာပဲ ျဖစ္ျဖစ္ for loop ကုိအသံုးျပဳရမယ္ဆုိတာ မေမ့သင့္ပါဘူး... ၿပီးေတာ့ array ေတြကို passed က်တဲ့အခါ pointer (*) ကုိ အသံုးျပဳရမယ္ဆုိတာကိုလဲ မေမ့သင့္ပါဘူး.. ဘာလုိ ့ဆုိေတာ့ array ဟာ data အစုအေ၀းတစ္ခု ျဖစ္တဲ့အတြက္ သူ ့ကို pointer လုိ address ကုိ ညႊန္ျပတဲ့ ဟာနဲ ့မွပဲ အသံုးျပဳလုိ ့ရပါမယ္... က်န္တာေလးေတြကိုေတာ့ မေျပာေတာ့ပါဘူး... ကိုယ့္ဘာသာ trace လုိက္ၾကည့္ပါ... programming က ကုိယ့္ဘာသာေလး ေခါင္းေလး နဲနဲပူသြားမွ လုပ္ရတာ အရသာ ရွိတာ... အဲေတာ့ က်ေနာ္လဲ ခင္ဗ်ားတုိ ့လဲ အရသာေလးကို မဖ်က္ဆီးခ်င္ပါဘူး....
sample_001 အေနနဲ ့ေတာ့ ဒီေလာက္ပါပဲ ခင္ဗ်ာ... အားလံုးပဲ ေပ်ာ္ရႊင္ပါေစ....




To Be Continued ♥♦

Last edited by green leaf; 14-05-2009 at 06:19 PM..
green leaf is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 7 ဦးတို႔မွ green leaf အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 14-05-2009, 11:01 PM
heainhtunoo
အရြယ္ေရာက္သူ
 
heainhtunoo's Avatar
 
အသင္း၀င္ေန႔စြဲ: Aug 2008
ေရးသားခ်က္မ်ား: 144
ေက်းဇူးတင္စကား: 166
ပို႔စ္ 105 ခုအတြက္ 420 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
heainhtunoo is on a distinguished road
ျပန္စာ - classes in C++

ေက်းဇူးအထူးတင္ပါတယ္ ကို green leaf ... ကြၽန္ေတာ္ေမွ်ာ္ေနတာၾကာပီ ..
အျမဲဖတ္တယ္ေနာ္..ကြၽန္ေတာ္လို စေလ႕လာေနသူကေတာ႔ေတာ္ေတာ္အဆင္ေျပတယ္..
heainhtunoo is offline   Reply With Quote
ေအာက္ပါအသင္း၀င္ 6 ဦးတို႔မွ heainhtunoo အား ေက်းဇူးတင္စကား ေျပာၾကားသြားပါသည္။
Old 11-05-2011, 04:25 AM
ေအာင္လံေလး
လမ္းေလွ်ာက္တတ္စ
 
အသင္း၀င္ေန႔စြဲ: Dec 2010
ေရးသားခ်က္မ်ား: 13
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 311
ပို႔စ္ 11 ခုအတြက္ 26 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
ေအာင္လံေလး is on a distinguished road
ျပန္စာ - classes in C++

green leaf အကိုေရ စာနဲ႕ဘာမွေတာ့္မဆို္င္ဘူးဗ် အကိုေမးလ္လိပ္စာေလးမ်ားရနိုင္မလား တစ္ခ်ိဳ႕အခက္အခဲေလးေတြတိုက္ရိုက္ေမးခ်င္လို႕ပါ .. အကိုစာေရးတာ ေတာ္ေတာ္ေလးစိတ္ရွည္ပါတယ္ .. ေက်းဇူးလည္းတင္ပါတယ္..။ထာ၀ရ ထပ္တူအက်ိဳးေပးနိဳင္ပါေစဗ်ာ...။
ေအာင္လံေလး is offline   Reply With Quote
Old 04-08-2011, 12:11 PM
khine
ေမြးကင္းစကေလး
 
အသင္း၀င္ေန႔စြဲ: Feb 2008
ေရးသားခ်က္မ်ား: 3
ေက်းဇူးတင္စကား: 4
ပို႔စ္ 2 ခုအတြက္ 3 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
khine is on a distinguished road
ျပန္စာ - classes in C++

grean leaf ေရ ေက်းဇူးအမ်ားၾကီးတင္ပါတယ္........
အခုမွ စေလ့လာတာဆိုေတာ့ ဘာလုပ္ရမွန္းမသိျဖစ္ေနတာ .....
သူငယ္ခ်င္းေရးထားတာေလးကို ဆက္ျပီးေလ့လာပါ့မယ္......
မ်ားမ်ားတင္ေပးေနာ္........ မသိတာရွိရင္လည္းေမးပါရေစ
khine is offline   Reply With Quote
Old 07-06-2013, 11:39 AM
လိွုင္၀င္းဦး
ေမြးကင္းစကေလး
 
အသင္း၀င္ေန႔စြဲ: Jun 2013
ေရးသားခ်က္မ်ား: 2
ႏိုင္ငံအလံ: Users Flag!
ေက်းဇူးတင္စကား: 0
ပို႔စ္ 1 ခုအတြက္ 1 ဦးမွ ေက်းဇူးတင္ေၾကာင္းေျပာပါသည္။
လိွုင္၀င္းဦး is on a distinguished road
ျပန္စာ - classes in C++

ေက်းဇူးတင္ပါတယ္ ကိုသစ္ရြက္စိမ္းေရ.....ကြၽန္ေတာ္လို စေလ႕လာေနသူကေတာ႔ေတာ္ေတာ္အဆင္ေျပတယ္..စီ++ၿပီးရင္စီရွပ္ဘက္လိုက္သင့္လားဂ်ာဗားဘက္လိုက္သင့္လားဆိုတာေၿပာၿပေပးပါ
လိွုင္၀င္းဦး is offline   Reply With Quote
Reply

တန္ဆာပလာမ်ား
ေဖာ္ျပမႈပံုစံ

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

ဖိုရမ္ေတြ ေက်ာ္ေရာက္ခ်င္ရင္ !

အျခားဆင္တူေဆြးေႏြးခ်က္မ်ား
ေဆြးေႏြးခ်က္ စတင္ေရးသားသူ ကြပ္ပ်စ္၀ိုင္း ျပန္စာမ်ား ေနာက္ဆံုးပို႔စ္
phython ေမာင္ဧက ေဆြးေႏြးခ်က္မ်ား 7 31-12-2010 05:12 PM
Iterating Infusion: Clearer Views of Objects, Classes, and Systems Zeiya E-Books & Tutorials 0 25-03-2007 11:37 PM


ဖိုရမ္၏ ပင္မအခ်ိန္သည္ ဂရင္းနစ္စံေတာ္ခ်ိန္ +6.5 ျဖစ္သည္။ေဒသစံေတာ္ခ်ိန္ 03:38 PM
Inactive Reminders By Icora Web Design