i hav coded a matrix class and its member functions (many of them are overloaded ones)...now in a function..for eg. function of matrix addition.. after the addition i want to return the local object "result" through a pointer (and not call by value)..however i aint getting d values of the result in main()...instea d i am getting garbage values when i print it...
here is my code :
i have given the bold effect to the code that i felt is related to my problem..so..pl s help me with this problem..
and yes..one more question..is there any way to return this "result" by a reference ??? i know it may seem absurd...bcoz of the scope of the local variable...stil l i would like to learn a way if any... :)
here is my code :
Code:
#include <iostream.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> // general function declarations void list (int *choice); // class declaration [B]class matrix { private : int rows; int columns; int * element; public : matrix(); matrix (int, int); void setdata (int, int, int *); void showptrdata(); matrix* operator+(matrix &); friend istream& operator >> (istream &, matrix &); friend ostream& operator << (ostream &, matrix &); // function overloading -- for printing a pointer object friend ostream& operator << (ostream &, matrix *&); };[/B] matrix :: matrix () { rows = 0; columns = 0; *element = 0; } matrix :: matrix (int r ,int c) { rows = r; columns = c; element = new int [rows * columns]; } istream& operator >> (istream &read, matrix &mat) { for (int i = 0; i < mat.rows * mat.columns; ++i) read >> *(mat.element+i); return read; } [B]ostream& operator << (ostream &print, matrix &mat) { for (int i = 0; i < mat.rows; ++i) { for (int j = 0; j < mat.columns; ++j) { print << *mat.element << " "; ++mat.element; } print << endl; } mat.element -= mat.rows * mat.columns; return print; } ostream& operator << (ostream &print, matrix *&mat) { for (int i = 0; i < mat->rows; ++i) { for (int j = 0; j < mat->columns; ++j) { print << *mat->element << " "; ++mat->element; } print << endl; } mat->element -= mat->rows * mat->columns; return print; } [/B] [B]matrix* matrix :: operator + (matrix &matrix2) { matrix result (rows, columns); for (int i=0; i< rows * columns; ++i) *(result.element+i) = *(element+i) + *(matrix2.element+i); //printf ("%d %d\n", result.rows, result.columns); //printf ("%u %u %u \n", &result, &result.rows, &result.columns); return &result; } [/B] void main() { clrscr(); int r, c; int choice; cout << "Enter the rows of the matrix : "; cin >> r; cout << "Enter the columns of the matrix : "; cin >> c; matrix matrix1 (r, c); cout << "Enter the elements rowwise : " << endl; cin >> matrix1; cout << "You have created the following matrix : " << endl; cout << matrix1; cin.ignore(); cin.get(); do { list (&choice); switch (choice) { case 1 : cout << endl << endl << "The matrix is as follows : " << endl; cout << matrix1; break; case 2 : cout << "Enter the new values of the matrix : " << endl; cin >> matrix1; cout << "The modified matrix is : " << endl; cout << matrix1; break; case 3 : [B] matrix matrix2(r,c); cout << "Enter the elements of the second matrix : " << endl; cin >> matrix2; matrix *result; result = matrix1 + matrix2; //printf ("%u\n", result); //printf ("%u %u\n", &result->rows, &result->columns); //printf ("%d %d\n", result->rows, result->columns); cout << "The resultant matrix is : " << endl; cout << result;[/B] break; case 4 : break; case 5 : break; case 6 : break; case 0 : exit(0); } cin.ignore(); cin.get(); } while (choice != 0); } void list (int *choice) { clrscr(); cout << "1. Display the matrix." << endl << "2. Modify the matrix." << endl << "3. Matrix Addition." << endl << "4. Matrix subtraction." << endl << "5. Matrix multiplication." << endl << "6. Transpose of matrix." << endl << "0.Exit." << endl; cin >> *choice; cin.ignore(); if (!(*choice >= 0 && *choice <= 6)) { cout << "Invalid choice." << endl; cin.get(); list (choice); } }
i have given the bold effect to the code that i felt is related to my problem..so..pl s help me with this problem..
and yes..one more question..is there any way to return this "result" by a reference ??? i know it may seem absurd...bcoz of the scope of the local variable...stil l i would like to learn a way if any... :)
Comment