نحوه نوشتن یک کلاس بوسیله cout - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

نحوه نوشتن یک کلاس بوسیله cout

+1 امتیاز

سلام اگر من این کلاس رو داشته باشم مثلا به این شکل  :

class MyClass 
{
    int x;
    int y;
}

بعد بخوام با cout  دو عضو x  y رو چاپ کنم چکار باید بکنم؟

MyClass m;
cout<<m; // kar nemikone

 

سوال شده اسفند 8, 1392  بوسیله ی مریم اکرمی (امتیاز 482)   25 55 66
دوباره تگ گذاری شد دی 19, 1393 بوسیله ی BlueBlade

2 پاسخ

+4 امتیاز
 
بهترین پاسخ
همانطوری که اطلاع دارید ما توی c++ دو نوع overload داریم overload کردن توابع عضو کلاس و توابع معمولی. در این مورد شما باید از مورد دوم استفاده کنید.
برای اینکار باید عملگر >> را overload نمائید به صورت زیر :
 
class MyClass
{
public:
	
    MyClass(int x,int y):x_(x),y_(y) {}

	int x_,y_;

};
ostream &operator<<(ostream &stream,const MyClass &obj){
	stream << obj.x_ << endl << obj.y_ << endl;
	return stream;
}

int main()
{
	MyClass a(10,12);
        cout <<a;
}
 

 

 
در برخی از شرایط پیش میاد که شما قصد دارید که عناصر داده ای  private کلاس مورد نظر را دسترسی داشته باشید که در حالت بالا امکان پذیر نیست به همین علت باید Overload عملگر >> را برای کلاس به صورت friend مشخص نمائید تا تابع Overload بتواند به اعضای private کلاس هم دسترسی داشته باشد.که در این صورت باید به صورت زیر عمل کنید.
 
class MyClass
{
public:
	
    MyClass(int x,int y):x_(x),y_(y) {}
	friend ostream &operator << (ostream &stream,const MyClass &obj);
private:
	int x_,y_;

};
ostream &operator<<(ostream &stream,const MyClass &obj){
	stream << obj.x_ << endl << obj.y_ << endl;
	return stream;
}

int main()
{
	MyClass a(10,12);
        cout <<a;
}

 

پاسخ داده شده اسفند 9, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده مرداد 17, 1393 بوسیله ی BlueBlade
فکر کنم منظورتون از Overload همان Override بود ، که به اشتباه Overload نوشتید...
overload : چند تا تابع با اسم یکسان ولی ورودی های متفاوت (البته در یک scope )
override : زمانی استفاده میشه که از یک کلاس ارث ببرین و متد هاش رو  تغییر بدین .
پس طبیعتا این جا همون overload درسته برای operator<< چون همون تابع رو با ورودی متفاوت اضافه کردیم.(و این که operator<<  به صورت global تعریف شده و اصلا داخل کلاس نیست . )
@returnx بحث override توی کلاس هاست اینجا تابع خارج از کلاس و به صورت معمولی overload میشه.
بله ، به نظر میرسه همون Overload درست تر باشه...
+3 امتیاز

اگه بخوای از بیرون کلاس به عضوهای کلاس دسترسی داشته باشی باید اونها رو در قسمت public کلاس بنویسی .

و با حرف "." میتونی به اعضای کلاس دسترسی پیدا کنی .

درضمن ";" هم در آخر کلاس باید نوشته بشه .

#include <iostream>

using namespace std;

class MyClass
{
public:
	int x;
	int y;
};

int main ()
{

	MyClass m;
	cout<<m.x;

	return 0;
}

 

 

پاسخ داده شده اسفند 9, 1392 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
...