Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
67 views36 pages

Introduction To Programming

The document describes the Matrix class which defines operations for matrix objects such as addition, subtraction, multiplication, division, input/output, and transpose. The Matrix class contains private data members to store the number of rows and columns and a 2D array to store element values. It implements various constructor, destructor, and member functions to perform matrix operations and input/output.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
67 views36 pages

Introduction To Programming

The document describes the Matrix class which defines operations for matrix objects such as addition, subtraction, multiplication, division, input/output, and transpose. The Matrix class contains private data members to store the number of rows and columns and a 2D array to store element values. It implements various constructor, destructor, and member functions to perform matrix operations and input/output.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 36

Introduction to Programming

Lecture 44
Class Matrix
class Matrix
{
private :
int numRows , numCols ;
double ** elements ;
};
Class Matrix
class Matrix
{
private :
int numRows , numCols ;
double ** elements ;
public :
Matrix ( int = 0 , int = 0 ) ; // Default constructor
Matrix ( const Matrix & ) ; // Copy constructor
~ Matrix ( ) ; // Destructor
Class Matrix
// Utility functions of Matrix class

int getRows ( void ) const ;


int getCols ( void ) const ;

// Input output functions for Matrix class

const Matrix & input ( istream & is = cin ) ;


const Matrix & input ( ifstream & is ) ;

void output ( ostream & os = cout ) const ;


void output ( ofstream & os ) const ;
Class Matrix

// Plus Operator
Matrix operator + ( Matrix & m ) const ;
Matrix operator + ( double d ) const ;
d is a variable
‘A’ is an object of a of type double
class Matrix

A+d;
d is a ‘a’ is an
variable of object of a
type double class Matrix

d+A;
Class Matrix
// Plus Operator

Matrix operator + ( Matrix & m ) const ;


Matrix operator + ( double d ) const ;
friend Matrix operator + ( double d , Matrix & m ) ;
const Matrix & operator += ( Matrix & m ) ;
i += 3 ;
i=i+3;

A += B ; // A and B are Matrices


A–B
Where A and B
are both matrices
d is a variable
‘A’ is an
of type double
object of a
class Matrix

A–d;
d is a ‘a’ is an
variable of object of a
type double class Matrix

d–A;
Class Matrix
// Minus Operator

Matrix operator - ( Matrix & m ) const ;


Matrix operator - ( double d ) const ;
friend Matrix operator - ( double d , Matrix & m ) ;
A*B;
Where A and B are both matrices
‘A’ is an d is a variable
object of a of type double
class Matrix

A*d;
d is a
variable of ‘a’ is an
type double object of a
class Matrix

d*A;
Class Matrix
// Multiplication Operator

Matrix operator * ( const Matrix & m ) ;


Matrix operator * ( double d ) const ;
friend Matrix operator * ( const double d , const Matrix & m ) ;
‘A’ is an d is a variable
object of a of type double
class Matrix

A/d;
Class Matrix
// Division Operator

Matrix operator / ( const double d ) ;


Example
// Stream Insertion and Extraction Operator

cin >> m ;

// Where m is a matrix
Class Matrix
// Stream Insertion and Extraction Operator

friend istream & operator >> ( istream & , Matrix & ) ;


friend ifstream & operator >> ( ifstream & , Matrix & ) ;

friend istream & operator << ( istream & , Matrix & ) ;


friend ifstream & operator << ( ifstream & , Matrix & ) ;
Class Matrix

const Matrix & operator = ( const Matrix & m ) ;


const Matrix & transpose ( void ) ;
Class Matrix
Matrix :: Matrix ( int row , int col ) // Default Constructor
{
numRows = row ;
numCols = col ;
elements = new ( double * ) [ numRows ] ;
for ( int i = 0 ; i < numRows ; i ++ )
{
elements [ i ] = new double [ numCols ] ;
for ( int j = 0 ; j < numCols ; j ++ )
elements [ i ] [ j ] = 0.0 ;
}
}
Matrix A ( B ) ;
Matrix A = B ;
Class Matrix
Matrix :: Matrix ( const Matrix & m )
{
numRows = m.numRows ;
numCols = m.numCols ;
elements = new ( double * ) [ numRows ] ;
for ( int i = 0 ; i < numRows ; i ++ )
{
elements [ i ] = new double [ numCols ] ;
for ( int j = 0 ; j < numCols ; j ++ )
elements [ i ] [ j ] = m.elements [ i ] [ j ] ;
}
}
Class Matrix
Matrix :: ~ Matrix ( void )
{
delete [ ] elements ;
}
Class Matrix
int Matrix :: getRows ( ) const
{
return numRows ;
}

int Matrix :: getCols ( ) const


{
return numCols ;
}
Class Matrix
void Matrix :: output ( ostream & os ) const
{
// Print first row with special characters
os.setf ( ios :: showpoint ) ;
os.setf ( ios :: fixed , ios :: floatfield ) ;
os << ( char ) 218 ;
for ( int j = 0 ; j < numCols ; j ++ )
os << setw ( 10 ) << " “ ;
os << ( char ) 191 << "\n" ;
Class Matrix
// Print remaining rows with vertical bars only
for ( int i = 0 ; i < numRows ; i ++ )
{
os << ( char ) 179 ;
for ( int j = 0 ; j < numCols ; j ++ )
os << setw ( 10 ) << setprecision ( 2 ) << elements [ i ] [ j ] ;
os << ( char ) 179 << "\n" ;
}
Class Matrix
// Print last row with special characters
os << ( char ) 192 ;
for ( int j = 0 ; j < numCols ; j ++ )
os << setw ( 10 ) << " " ;
os << ( char ) 217 << "\n" ;
}
Class Matrix
void Matrix :: output ( ofstream & os ) const
{
os.setf ( ios :: showpoint ) ;
os.setf ( ios :: fixed , ios :: floatfield ) ;
os << numRows << " " << numCols << "\n" ;
for ( int i = 0 ; i < numRows ; i ++ )
{
for ( int j = 0 ; j < numCols ; j ++ )
os << setw ( 6 ) << setprecision ( 2 ) << elements [ i ] [ j ] ;
os << "\n" ;
}
}
Class Matrix
const Matrix & Matrix :: input ( istream & is )
{
cout << "Input Matrix size: " << numRows << " rows by " << numCols << " columns \n" ;
for ( int i = 0 ; i < numRows ; i ++ )
{
cout << "Please enter " << numCols << " values separated by spaces for row no." << i+1 << ": " ;
for ( int j = 0 ; j < numCols ; j ++ )
{
cin >> elements [ i ] [ j ] ;
}
}
return * this ;
}
Class Matrix
const Matrix & Matrix :: input ( ifstream & is )
{
int Rows , Cols ;
is >> Rows ;
is >> Cols ;
if ( Rows > 0 && Cols > 0 )
{
Matrix temp ( Rows , Cols ) ;
* this = temp ;
for ( int i = 0 ; i < numRows ; i ++ )
{
for ( int j = 0 ; j < numCols ; j ++ )
{
is >> elements [ i ] [ j ] ;
}
}
}
return * this ;
}
Class Matrix
const Matrix & Matrix :: transpose ( )
{
if ( numRows == numCols ) // Square Matrix
{
double temp ;
for ( int i = 0 ; i < numRows ; i ++ )
{
for ( int j = i + 1 ; j < numCols ; j ++ )
{
temp = elements [ i ] [ j ];
elements [ i ] [ j ] = elements [ j ] [ i ] ;
elements [ j ] [ i ] = temp ;
}
}
}
Class Matrix
else
{
Matrix temp(numCols, numRows);
for ( int i = 0 ; i < numRows ; i ++ )
{
for ( int j = 0 ; j < numCols ; j ++ )
{
temp.elements [ j ] [ i ] = elements [ i ] [ j ] ;
}
}
* this = temp ;
}
return * this ;
}

You might also like