آشنایی با زبان C++:
C++ از C گرفته شده است و خود C نیز از دو زبان برنامه نویسی BCPL و B مشتق شده است.C++ که تعمیمی از زبان C است در اوایل دهه 1980 توسط بی یارنه استراس تروپ دانمارکی در آزمایشگاههای بل طراحی شد. C++ حاوی ویژگی های متعددی است که باعث زیبایی بیشتر زبان C شده است اما مهم تر از این ها ، افزون قابلیت های برنامه نویسی شی گرا به زبان c است.c++ زبانی دورگه (پیوندی) است. برنامه ای که با این زبان نوشته می شود به صورت زبان C یا به صورت شی گرا یا به هر دو صورت امکان پذیر است.
برنامه های c++ از قطعاتی به نام کلاس ها ( یا رده ها ) و توابع تشکیل می شوند. اکثر برنامه نویسان c++ از مزایای مجموعه غنی ای از کلاس ها و توابع موجود در کتابخانه استاندارد c++ استفاده می کنند.
سیستم های c++ معمولا از چند قسمت تشکیل می شوند که عبارتند از محیط طراحی و تولید برنامه ، زبان و کتاب خانه استاندارد c++ .
یک نمونه از محیط برنامه نویسی c++ در زیر توضیح داده شده است:
- برنامه ها در ویرایش گر نوشته شده و در دیسک ذخیره می شوند.
- برنامه پیش پردازنده، دستور ها را پردازش می کند.
- کامپایلر کد مقصد (OBJ) ایجاد می کند و آن را در دیسک ذخیره می کند.
- پیوند دهنده ، کد مقصد را به کتابخانه پیوند می دهد و یک فایل a.out ایجاد می کند و آن را در دیسک ذخیره می کند.
- بار کننده برنامه را در حافظه قرار می دهد.
- cpu هر یک از دستورات را دریافت می کند و آن را اجرا می نماید و احتمالا برای اجرای برنامه، مقادیر جدید را در حافظه ذخیره می کند.
معمولا برنامه های c++ برای اجرا از شش مرحله مختلف عبور می کنند که عبارتند از: ویرایش(نوشتن)، پیش پردازش، کامپایل، پیوند بارگذاری در حافظه و اجرا.
اولین مرحله کار در محیط c++، نوشتن فایل برنامه است.این کار با یک برنامه ویرایش گر انجام می شود.برنامه نویس برنامه را در محیط ویرایشی c++ تایپ می کند. آنگاه برنامه را بر روی یک حافظه ثانویه نظیر دیسک ذخیره می کند.نام فایل برنامه c++ معمولا با پسوند های .cpp، cxx یا .C به پایان می رسند.بعد از ویرایش برنامه، برنامه نویس به کامپیوتر فرمان می دهد برنامه را کامپایل کند.کامپایلر، برنامه c++ را به برنامه ای به زبان ماشین ترجمه می کند که به آن برنامه مقصد می گویند.در یک سیستم c++ برنامه پیش پردازنده c++، از فرمان های خاصی به نام دستور های پیش پردازنده استفاده می کند که بیان می کند قبل از کامپایل برنامه لازم است عملیات خاصی بر روی برنامه اجرا شود.این معلومات ، معمولا شامل قرار دادن دیگر فایل های متنی در فایلی است که قرار است کامپایل شود و جایگزینی متعدد متنی را انجام می دهند.
مرحله بعدی پیوند دان برنامه است . معمولا برنامه های c++ حاوی ارجاع هایی به توابع تعریف شده در جاهای دیگر نظیر کتاب خانه های استاندارد یا کتاب خانه های خصوصی گروهی از برنامه نویسان هستند که روی یک پروژه خاص کار می کنند.برنامه مقصد تولید شده توسط کامپایلر C++ ، معمولا حاوی حفره هایی برای این قسمت های مفقد شده است . پیوند دهنده ، برنامه مقصد را با برنامه توابع مفقود شده پیوند می زند تا یک تصویر اجرایی (بدون هیچ قطعه نوشته نشده ) ایجاد کند.
مرحله بعدی بارگذاری برنامه در حافظه است . قبل از آنکه بتوان یک برنامه را اجرا کرد ، ابتدا باید آن را در حافظه قرار داد. این کار توسط بار کننده انجام می شود که تصویر اجرایی را از دیسک گرفته و آن را به حافظه منتقل می کند.
در پایان ، کامپیوتر زیر نظر cpu برنامه را دستور به دستور اجرا می کند.
بیشتر برنامه های c++ با ورود و خروج داده ها سر و کار دارند.توابع معینی از c++ ورودی خود را از طریق cin دریافت می کنند که معمولا صفحه کلید است اما cin می تواند در ارتباط با یک دستگاه دیگر قرار داشته باشد.غالبا داده ها از طریق cout در خروجی چاپ می شوند که معمولا خروجی صفحه نمایش کامپیوتر است اما cout می تواند در ارتباط با یک دستگاه دیگر قرار داشته باشد.علاوه بر این ، جریان خطای استاندارد cerr نام دارد . جریان cerr برای نمایش پیغام های خطا به کار می رود.
انواع داده اولیه
تمام متغیر ها در یک برنامه c++ باید قبل از استفاده اعلان شوند. شناسه های c++ دنباله ای از یک یا چند کاراکتر است که حرف، رقم و کاراکتر زیر واژه(_) تشکیل می شود.شناسه نمی تواند با رقم شروع شود.شناسه های c++ مس توانند هر طول دلخواهی داشته باشند اما بعضی از سیستم ها و نسخه ها ی c++ ممکن است محدودیت هایی برای طول شناسه داشته باشند.
c++ بین حروف کوچک و بزرگ تفاوت قائل است.کاراکتر ها بین کوتیشن قرار می گیرند. کاراکتر /n انتهای خط رامشخص می کند و نماد تهی است و در پردازش رشته ها کاربرد دارد.کدهای کاراکتر ASCI می توانند با کد های عددی مشخص شوند.
هر متغیر ذخیره شده در کامپیوتر دارای نام، مقدار، نوع داده، و اندازه (طول) است.
اعداد اعشاری می توانند با نقطه ممیز یا به صورت توان باشند.
- انواع داده عددی
نوع صحیح به شکل های گوناگونی وجود دارد
شش نوع عدد صحیح در C++ وجود دارد که در میزان حافظه و محدوده مقادیر با هم متفاوتند. این شش نوع عبارتند از:
نوع | محدوده مقادیر | حافظه اشغالی |
short | -32768 تا 32767 | 2 byte |
int | -2147483648 تا 2147483647 | 4 byte |
long | -2147483648 تا 2147483647 | 4 byte |
unsigned short | 0 تا 65535 | 2 byte |
unsigned int | 0 تا 4294967295 | 4 byte |
unsigned long | 0 تا 4294967295 | 4 byte |
- نوع کاراکتری:
یک کاراکتر یک حرف یا عدد یا نشانه است.
برای معرفی یک متغیر کاراکتری به صورت زیر عمل می کنیم:
char name = ‘value’;
- نوع منطقی (boolean):
از این نوع برای نگهداری مقادیر عبارات منطقی استفاده می شود. عبارات منطقی یا درست (true) است و یا نادرست (false). در استفاده از نوع منطقی از مقادیر true و false استفاده می شود ولی در خروجی برنامه بجای true عدد 0 و بجای false عدد 1 چاپ می شود و در حافظه همین اعداد ذخیره می گردند.
- نوع شمارشی:
نوع شمارشی نوعی است که بنا بر نیاز برنامه نویس ایجاد می شود. این نوع نیز از انواع صحیح است .برای ساخت یک نوع شمارشی به شکل زیر عمل می کنیم:
enum typename{ enumerator-list };
کلمه کلیدی enum برای ایجاد نوع جدید استفاده می شود. typename اسمی است که برای نوع جدید در نظر گرفته می شود. enumerous-list مجموعه مقادیر این نوع است.
- نوع ممیز شناور:
همان نوع اعشاری است.این نوع محدوده بزرگی از اعداد را شامل می شود. 3 نوع اعشاری وجود دارد که از نظر میزان حافظه و محدوده مقادیر با هم متفاوتند.
نوع | حافظه اشغالی |
float | 4 byte |
double | 8 byte |
Long double | 8یا 12 یا 16 byte |
اعداد اعشاری به دو صورت نمایش داده می شوند:
1. شکل ساده مانند عدد 182.54
2. نماد علمی که بصورت یک عدد بین 1 تا 10 ضربدر توان صحیحی از 10 نمایش داده می شود.مانند:
عدد | نمایش در کامپیوتر |
-0.00000000123 | -1.23 e -9 |
1230000000 | 1.23 e 9 |
اشاره گر ها:
اشاره گر ها مانند سایر متغیر ها باید قبل از استفاده اعلان شوند:
Int *countptr;
باید قبل از هر متغیری که از نوع اشاره گر اعلان شده است یک ستاره قرار دهید.یک اشاره گر می تواند مقدار اولیه 0 یا null یک آدرس را بگیرد.در این صورت به جایی اشاره نمی کند.
عملگر & یا عملگر آدرس ، عملگر یگانی است که آدرس عملوند خود را بر می گرداند.
آرایه ها:
نام آرایه ها از همان قوانین نامگذاری متغیر های دیگر پیروی می کند.اندیس آرایه های یک بعدی از صفر شروع می شود.
DataType arrayName[size of array];
رشته ها در c++ به صورت آرایه ای از کاراکتر ها ذخیره می شوند که با به پایان می رند.
همچنین می توان در موقع تعریف آرایه به عناصر آن مقدار نیز داد.برای انتقال آرگومان از نوع آرایه به تابع کافی است که نام آرایه را بدون ذکر کروشه مشخص کنیم.
کلاس ها
- کلاس ها به صورت فایل هایی با پسوند “h” ذخیره می شوند.و برای استفاده از آنها در برنامه باید آنها را ضمیمه کنید.
در c++ هر برنامه با یک کد پیش پردازنده شروع می شود.مانند:
#include <iostream.h>
خطوطی که با # شروع می شوند قبل از کامپایل برنامه توسط پیش پردازنده پردازش می شوند.این خطوط خاص به پیش پردازنده می گویند در برنامه محتوای سر فایل جریان ورودی/خروجی یعنی iostream.h را قرار دهد.
در داخل کلاس دو مسئله تعیین می شود:
1- متغیر های لازم.
2- توابع مورد نیاز.
در مورد تعریف متغیر ها باید گفت که همانند تعریف متغیر در برنامه نویسی غیر شی گرا می باشند. اما یک نکته مهم را باید مد نظر داشت و آن این است که در برنامه نویسی شی گرا در کلاس شما حق مقدار دهی به یک متغیر در حین تعریف آن را ندارید. به مثال زیر توجه کنید:
Int a=10;
این در برنامه نویسی عادی مشکلی ندارد. اما در یک کلاس حق چنین کاری را نداریم.و باید به شکل زیر بنویسیم:
Int a;
نحو تعریف کلاس به صورت زیر می باشد:
Class classname
{
class_component1;
Class_component2;
….
Class_componentn;
}
اعلان شی داده ای در کلاس می تواند const،struct یا اعلانهایی از اشیا نوع کلاس باشد.
هر برنامه از یک یا چند تابع تشکیل می شود که یکی از آنها باید main() باشد. در سمت چپ تابع باید مقداری را که تابع بر می گرداند مشخص کنیم.بدنه تابع با آکولاد باز شروع و با آکولاد بسته خاتمه می یابد.
کل متد را می توان در بدنه کلاس تعریف کرد و یا فقط الگوی آن را ذکر کرد.و سپس تعریف آنها را در خارج کلاس آورد هر عضو کلاس دارای صفت کنترل دستیابی است که قابلیت مشاهده آن عضو را مشخص می کند.کنترل دستیابی عبارتند از public که در خارج کلاس شناخته شده اند، private که فقط در داخل بدنه کلاس قابل ارزیابی هستند و protected که توسط کلاسهای مشتق (در وراثت) قابل استفاده اند.اگر کنترل دستیابی مشخص نشود ، private منظور می شود.کنترل های دستیابی private و protected گاهی بیش از حد مطلوب محدودند.گاهی یک کلاس می تواند به کلاس دیگر اجازه دهد تا به اعضای اختصاصی آن دستیابی داشته باشند.بدین ترتیب باید کلاس کلاس دیگر را به عنوان دوست تعریف کند.برای اعلان یک تابع به عنوان friend یک کلاس ، قبل از پیش نمونه تابع در تعریف کلاس، کلمه کلیدی friend را باید نوشت.
اعضای شی داده ای در درون کلاس با نام آن شی ، نقطه و سپس نام عضو دستیابی می شوند.
اشاره گر های this :
اشاره گر هایی هستند که در داخل یک متد به شی فراخواننده آن متد دستیابی دارند.مانند:
Class myclass{
متد ها;
Private:
Myclass*object;
};
عنصر object به شیئی از نوع myclass اشاره میکند.متدی که اشاره گر object مربوط به شی از myclass را مقدار می دهد تا به شی دیگری از myclass اشاره کند به صورت زیر تعریف می شود:
Myclass I,j; //دوشی اعلان می شوند
i.setpointer(j.getpointer());//ارسال می گردد i به شیj اشاره گر به
getpointer() و setpointer() به صورت زیر تعریف می شوند.
Myclass::getpointer(){return this;}
Myclass::setpointer(myclass *x){object=x;}
متد همنام با کلاس را سازنده کلاس گویند و هنگام ایجاد شی از آن کلاس فراخوانی می شوند.سازنده ها فاقد نوع هستند.متد همنام با کلاس که با ~ شروع می شود مخرب نام دارد و هنگامی که حافظه شی از کلاس آزاد می شود فراخوانی می گردد. مثال زیر را ببینید:
Class rational
{ public:
Rational(int a;int b){ numerator = a; denominator = b;}
~rational(){numerator=0;denominator=0;}// Destroy value
Private:
Int numerator;
Inyt denominator;
…}
Main()
{ rational newvalue(1,2);
شی newvalue از نوع rational و اعضای 1 و 2 تخصیص می یابد. اگر اعلان زیر به تعریف کلاس اضافه شود ، اعلان های پیش فرض برای اشیا rational منظور می شود که نیاز به مقدار اولیه دادن نیست:
Rational() {numerator=1; denominator=1;}
و بر این اساس ، دستور زیر اشیا x ، y و z را از نوع rational و با مقدار اولیه 1و 1 اعلان می کند:
Rational x,y,z;
کلاس های مشتق:
با استفاده از کلاس های مشتق می توان اطلاعات را از کلاسی به کلاس دیگر منتقل کرد:
}کلاس پایه:کلاس مشتق
Class_component1;
Class_component2;
…
Class_componentn;
}کلاس مشتق نام کلاسی است که از کلا س پایه ایجاد می شود. تمام اعضای public و protected کلاس پایه به عنوان اعضای عمومی و محافظت شده کلاس مشتق منظور می شوند. مگر اینکه آن نام در کلاس مشتق مجددا تعریف شود.
تمام اعضای کلاس پایه می توانند به صورت زیر دارای دستیابی پیش فرض باشند:
Class کلاس مشتق : کلاس پایه دستیابی {…}
دستیابی می تواند public ، private یا protected باشد.
توابع مجازی:
Vitual void setvalue(int *a,int b);
هرگاه از نام setval استفاده گردد، چنانچه در کلاس مشتق مجددا تعریف شده باشد، آخرین کپی از آن بکار گرفته می شود.اگر تعریف کلاسی فقط به عنوان کلاس پایه استفاده شود، به طوری که تمام اشیا داده در کلاس مشتق اعلان شوند، آن کلاس را انتزاعی گوییم. کلاس انتزاعی را می توان به عنوان کلاسی تعریف کرد که شامل تابع مجازی تهی باشد:
Virtual void setvalue(int *a,int b)=0;
اگر کلاس شامل تابع مجازی تهی باشد، نمی تواند شی دیگری داشته باشد. کلاس مشتقی که شامل تابع مجازی است باید آن را دوباره تعریف کند تا بتواند از آن برای ایجاد اشیایی از کلاس مشتق استفاده کند.
قالب ها:
C++ شکلی از تابع کلی به نام قالب دارد که نحو آن به صورت زیر است:
Template <class پارامتر نوع> class تعریف نام کلاس
تعریف ممکن است تعریف کلاس یا تعریف تابع باشد.برای توصیف اعلان کلاس از<نوع واقعی> نام کلاس template استفاده می شود.مثال زیر را ببینید:
1 #include <stream.h>
2 Template<class stacktype,int size>class allstack
3 {public:stacktype stg[size];};
4 Allstack<int,10>x;
5 Allstack<float,20>y;
6 Main()
7 {x.stg[4]=7.5; //int array
8 Y.stg=7.5; //float array
9 Cout << x.stg[4] <<” <<y.stg[4] << endl;}
خطوط 2 و 3 یک قالب کلاس به نام allstackایجاد می کند که پارامتر نوعی به نام stacktype و پارامتر صحیحی به نام size دارد که حافظه را برای آرایه ای به نام tag و با اندازه size و از نوع stacktype ایجاد می کند.خطوط 4و5 شی x را ایجاد می کند که یک allstack است و حافظه داخلی آن ، آرایه ای صحیح به طول 10 است.حافظه داخلی شی y آرایه اعشاری به طول 20 است. ترجمه و اجرای برنامه، نتیجه زیر را می دهد:
Compiler error message:
Sample.cc in function ‘int main():
Sample.cc:7:warning:float or double assigned to integer data type
% execute
7 7.5
از پیغام خطا مشخص می شود که 7.5 در انتساب به x.stg[4] به مقدار صحیح تبدیل شده است ولی در انتساب به y.stg[4] به صورت اعشاری باقی مانده است.
نمایش حافظه:
اشیا کلاس می توانند مانند اجزای ساختمان ذخیره شوند.فراخوانی متدی مثل (پارامتر)classobject.methodname به صورت زیر ترجمه می شود:
Classname:: methodname(&classobject,پارامتر)
پیچیدگی زمانی پیش می آید که ، توابع مجازی فراخوانی شوند، زیرا تابع واقعی که باید فراخوانی شود، ممکن است در کلاس مشتق مجددا تعریف شود.لازم است برای هر تابع مجازی موروثی، یک جدول پرش در شی کلاس ذخیره شود.اگر این جدول با توابع مجازی جدیدی در کلاس مشتق تغییر کند، این شی داده همیشه به تابع مجازی فعلی که باید فراخوانی شود اشاره می کند.
کنترل ترتیب اجرا:
کنترل ترتیب c++ مانند c است.در c++ پردازش استثنا نیز وجود دارد ولی در بعضی از کامپایلر های c++ موجد نیست.عبارات و دستورات c در عبارات و دستورات c++ مانند c است.
پارامتر های پیش فرض توابع:
پارامتر های توابع می توانند مقدار اولیه داشته باشند:
Fn(int a,int b=7);
اگر هنگام فراخوانی تابع، آرگومانی که مقدار اولیه دارد ذکر نشود ، از آن مقدار استفاده می کند.
دستور try:
دستور try برای پردازش استثناهایی به کار می رود که توسط برنامه نویس تعریف شده اند:
Try
{statement1;
statement2;
…
if badcondition {throw exceptionName};
}
Catch exceptionName { // do something for exception
} //end of exception
}
در داخل هر زیر برنامه ای که بلوک try قرار دارد، پرتاب شرط موجب می شود دستور catch مربوط به آن اجرا شود . پس از اجرای این دستور زیر برنامه خاتمه می یابد.
دستورات catch و تعریف توابع همنام به ترتیب تست می شوند.تا با دستور throw مناسبی تطبیق کند. دستور زیر را ببینید:
Throw “this is bad data”
این استثنا ممکن است توسط پردازنده زیر دریافت شود:
Catch (char *ErrorString) {/* Do something*/}
ورودی و خروجی:ورودی-خروجی به صورت مجموعه ای از توابع استاندارد تعریف شده اند. توابع cin و cout برای ورودی – خروجی به کار می روند.
Polymorphism چند ریختی:
چند ریختی یا Polymorphism یکی از خواص جالب در c++ محسوب می شود.
اگر دو یا چند تابع امضای متفاوتی داشته باشند، می توانند همنام باشند. مثال زیر را ببینید:
Int myf(int a,int b){…};//function A
Int myf(int a){…};//function B
این دستورات دو تابع A و B را نشان می دهند.وقتی نام تابعی دو بار در برنامه تعریف می شود ، C++ اعمال زیر را انجام می دهد:
1. اگر امضا ها دقیقا یکسان باشند، تابع دوم، اعلان دوباره اولی منظور می شود.
2. اگر آرگومانها یکسان ولی مقادیر برگشتی یکسان نباشند ، تابع دوم خطا محسوب می شود.
3. اگر آرگومان ها سازگار نباشند، توابع ، همنام فرض می شوند.
4. عملگر ها را در C++ می توان مجددا تعریف کرد. تابعی که عملگر ها را دوباره تعریف می کند با operator شروع می شود که پس از آن نام عملگر مورد نظر قرار می گیرد.دستور زیر عملگر + را مجددا تعریف می کند:
Operator + (int x) {…}
توابع تعریف مجدد عملگر می توانند به عنوان عضو کلاس یا تابع دوست کلاس باشند.
توابع استاندارد:
تمام توابع c درc++ قابل استفاده اند و علاوه بر این توابع ورودی –خروجی دیگری در stream.h تعریف شده اند .
تابعgetline(char*b , int bsize , char delim =’\n’) رشته ای حداکثر با طول bsize-1 را می خواند و آن را در آرایه b ذخیره می کند. در انتهای رشته کاراکتر تهی قرار می گیرد . delim آخرین کاراکتر ورودی را مشخص می کند.
تخصیص حافظه:
تخصیص حافظه در c++ با توابع new و آزاد سازی آن با تابع delete انجام می شود:
Int *p;
P=new int;
Delete p;
ترتیب اجرای برنامه:
هر برنامه c++ را می توان با استفاده از هفت نوع دستور کنترلی مختلف do/while, while, switch, if/else, if و for) نوشت که تنها به دو صورت (پشته ای شدن دستور کنترلیف تودرتو نوشته شدن دستور کنترلی) با هم ترکیب می شوند.
دستورات:
- دستور if:
شکل کلی دستور if به شکل زیر است:
If(شرط)
{
…
}
Else
{
…
}
این دستور به شکل زیر نیز قابل پیاده سازی ایست:
شرط ? عمل1 : عمل 2 ;
- دستور تکرار while:
دستور تکرار while به صورت زیر می باشد:
While (شرط)
{
….
}
- دستور تکرار for:
دستور تکرار for به صورت زیر می باشد:
For ( datatype نام متغیر کنترلی= مقدار; شرط ادامه حلقه; افزایش یا کاهش متغیر کنترلی)
{
…
}
- دستور چند انتخابی switch:
فرمت دستور switch به صورت زیر می باشد:
Switch (مقدار یک متغیر)
Case ‘مقدار1‘ :
….
Break;
…
Case ‘مقدار n’ :
…
Break;
Default:
….
Break;
وجود default اختیاری است.
- دستور تکرار do/while:
فرمت دستور do/while بسیار شبیه به دستور while است.
Do
{
Statement
}
While (condition);
دستور های break و continue:
دستورات فوق جریان عادی کنترل برنامه را تغییر می دهند.دستورbreak موجب می شود که اجرا بلافاصله از داخل حلقه خارج شود.و دستور continue موجب می شودکه برنامه از باقی مانده بدنه آن دستورات عبور کند و با تغییر بعد در حلقه ادامه می یابد.
ذکر مطلب با ذکر منبع بلا مانع است.
Most accurate C++ to C# converter. Free demo, support, & updates.www.tangiblesoftwaresolutions.com
|::|>,-_
سلام. دوست عزیزم خوشحالم که وبلاگی پربار دارید . از طرف سایت لینک نگار دات کام مزاحمتون میشم. تو این سایت سیستمی کاملا هوشمند طراحی کردیم که با توجه به پارامترهای کاملا عادلانه که از گوگل دریافت می کند تعداد بازدید شما را دریافت کرده و در گوگل و موتورهای جستجوی دیگه مثل یاهو ثبت می کنه. بنابراین هم مطالبتان در سایت ثبت می شود و هم در گوگل ایندکس میشود و هم اینکه تو کلی وبلاگ دیگه هم به نمایش در میاد حسن این کارم اینه که بازدیدتون بیشتر می شه و می تونین سایت پربازدهی رو مدیریت کنید. شما می تونید به هنگام آپ دیت وبلاگ خود لینک مطلب جدید رو تو لینک باکس قرار بدید تا در مدت زمان کمتری مطلبتون بازدید مورد نظرشو بگیره. برای ورود به جمع ما کافیه ثبت نام کنید و کد لینک باکس رو تو قالبتون قرار بدبد و بعدش لینکهاتون رو ثبت کنید. یه خواهش دیگه داریم اونم این که برای ثبت نام از اینترنت اکسپلور استفاده نکنید و از مرور گرهای دیگه ای مثل فایر فاکس، نت اسکیپ و ... استفاده کنید تا ثبت نام دقیق انجام بشه البته این فقط یه پیشنهاده. قبل از ارسال لینک قوانین رو مطالعه بکنید و توجه داشته باشید که در صورت استفاده از یک لینک در زمان های مختلف سیستم به صورت هوشمند شما را حذف کرده و متاسفانه عضویت تان رو ملغی می کنه که این واقعا برای ما ناراحت کننده هست که دوستی مثل شما رو از دست بدیم. نکته آخر این که اگر به مشکلی برخوردین با ای دی ما تماس بگیرین تا کمکتون کنیم
:".-|_:-: