Hi,

After years of C programming, I'm starting to learn C++ and am amazed at the number of keywords and how much more complex the syntax is. It is becomming clear to me that C++ is meant for big programs.

I'm writing a template matrix class as an exercise. I am modeling it on the STL vector template class. I am wondering about my use of the keywords inline, const, delete vs delete[], explicit.

In the following code have I used the words inline and const in the correct places? Should I be using delete or delete[] in my destructor? Should I be using the word explicit in any of my constructors or anywhere else?

Thanks. Happy New Year!

Peter

Code:#include <iostream> typedef unsigned long size_type; template <class Type> class Matrix { public: Matrix(size_type ro=0, size_type co=0); Matrix(size_type ro, size_type co, Type val); Matrix(const Matrix &ma); ~Matrix() {delete mat;} size_type rows() const {return r;} size_type cols() const {return c;} void display() const; protected: void init(size_type ro, size_type co); size_type r, c; Type *mat; }; template <class Type> inline void Matrix<Type>::init(size_type ro, size_type co){ mat = new Type[ro*co]; assert (mat != 0); r = ro; c = co; } template <class Type> inline Matrix<Type>::Matrix(size_type ro, size_type co){ init(ro,co); } template <class Type> inline Matrix<Type>::Matrix(size_type ro, size_type co, Type val){ init(ro,co); unsigned int i, j; for (i=0; i<r; i++){ for (j=0; j<c; j++){ mat[i*c+j] = val; } } } template <class Type> inline Matrix<Type>::Matrix(const Matrix &ma){ init(ma.r,ma.c); unsigned int i, j; for (i=0; i<r; i++){ for (j=0; j<c; j++){ mat[i*c+j] = ma.mat[i*c+j]; } } } template <class Type> void Matrix<Type>::display() const{ unsigned int i, j; std::cout << "[" << std::endl; for (i=0; i<r; i++){ std::cout << "["; for (j=0; j<c; j++){ std::cout << mat[i*c+j]; if (j < c-1) std::cout << " "; } std::cout << "]" << std::endl; } std::cout << "]" << std::endl; } int main (void) { Matrix<double> mat(2,4,-9.9); std::cout << "mat = "; mat.display(); std::cout << "(rows, cols) = (" << mat.rows() << ", " << mat.cols() << ")" << std::endl; Matrix<double> mat2; std::cout << "mat2 = "; mat2.display(); std::cout << "(rows, cols) = (" << mat2.rows() << ", " << mat2.cols() << ")" << std::endl; const Matrix<double> mat3 = mat; std::cout << "mat3 = "; mat3.display(); std::cout << "(rows, cols) = (" << mat3.rows() << ", " << mat3.cols() << ")" << std::endl; return 0; }