سلام دوستان , من تازه وارد هستم اینجا و همچنین به برنامه نویسی c++ , یک راهنمایی می خواستم در مورد برنامه ای که obj برای ماتریس بسازد که شامل constructor, copy constructor , معکوس و ضرب و جمع و ترانهاده باشد..... گیج شدم :41:
ممنونم
Printable View
سلام دوستان , من تازه وارد هستم اینجا و همچنین به برنامه نویسی c++ , یک راهنمایی می خواستم در مورد برنامه ای که obj برای ماتریس بسازد که شامل constructor, copy constructor , معکوس و ضرب و جمع و ترانهاده باشد..... گیج شدم :41:
ممنونم
سازندۀ کپی در مواقعی استفاده می شود که ما بخواهیم یک شئ جدید ولی با مقادیر یک شئ دیگر از همان نوعبوجود آوریم.
برای درک بهتر موضوع به مثال های زیر توجه کنید.
ابتدا یک کلاس (به نام A) بدون سازندۀ کپی:
کد:class A //Without copy constructor
{
private:
int x;
public:
A() {x = 10;}
A(int a){x = a;}
~A() {}
}
در کد بالا به سازندۀ A() اصطلاحاً سازندۀ پیش فرض نیز گفته می شود (چون اگر سازنده ای مشخص نکنیم، این سازنده به صورت پیش فرض اجرا می شود)
در مثال زیر یک کلاس با سازندۀ کپی مشاهده می کنید:
سازندۀ کپی در مواردی مجبور به استفاده می شویم که کلاس ما دارای یک اشاره گر باشد (مثل کلاس بالا). در این صورت باید محل مورد اشاره را نیز برای شئ جدید بوجود آوریم وگرنه آن محل بین دو کلاس به صورت مشترک خواهد بود.کد:class B //With copy constructor
{
private:
char *name;
public:
B()
{
name = new char[20];
}
~B()
{
delete name[];
}
//Copy constructor
B(const B &b)
{
name = new char[20];
strcpy(name, b.name);
}
};
سازنده های کپی در سه جا به کار می روند:
1- ساختن یک شئ جدید از یک شئ
2- هنگام ارسال شئ به تابع با مقدار
3- هنگام بازگشت دادن یک شئ از تابع
در مورد ماتریس:
یک عضو به صورت زیر تعریف کن:
و یک عضو برای نگهداری طول ماتریس:کد:int **mat;
و در سازندۀ کپی آن یه همچین چیزی باشه:کد:int n;
برای ضرب و ترانهاده و ... هم که فک نمی کنیم مشکلی باشه.کد:Matrix(const Matrix &old)
{
n = old.n;
mat = new int*[n];
for(int i=0;i<n;i++)
{
mat[i] = new int[n];
for(int j=0;j<n;j++)
{
mat[i] = old.mat[i]
}
}
}
برای پیاده سازی این توابع هم توی اون تابع یک Matrix می سازی (new میکنی) و عملایت رو روش انجام می دی.
البته باید دو تابع برای برگردوندن و نوشتن توی عناصر ماتریس بنویسی:
فقط یه مسئله که هست اینه که بهتره یه سازنده بسازی که طول ماترس رو میگیره و اونو می سازه:کد:void setValue(int i,int j, int value)
{
mat[i][j] = value;
}
int getValue(int i,int j)
{
return mat[i][j];
}
که این سازنده مقدار عناصر رو صفر می کنه (می تونی این قسمت صفر کردنو برداری).کد:Matrix(int N)
{
mat = new int*[M];
for(int i=0;i<n;i++)
{
mat[i] = new int[n];
for(int j=0;j<n;j++)
{
mat[i] = 0;
}
}
}
دوست عزیز ممنون از راهنمایی , از سر در گمی در اومدم (-;
سلام اگه مقادير درايه هاي ماتريس ثابت باشند نخواهيم طول بدهيم سازنده كپي آن چجوري ميشه؟ چون n وجود نداره؟ بشدت گيج شدم
همچنين براي سربارگذاري عملگرهاي مساوي و مساوي مساوي(= و ==) براي ماتريس چ بايد كرد؟
خيلي ممنون ميشم پاسخ بدين