Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: [ Solved ]Lớp khuôn mẫu (template class)

  1. #1
    Ngày gia nhập
    08 2006
    Bài viết
    32

    Mặc định [ Solved ]Lớp khuôn mẫu (template class)

    Code:
    // Lop Ma tran
    template <class Ty> class Matrix
    {
    	private:
    		int NumRow;
    		int NumCol;
    		Ty** Array;
    	public:
    		Matrix(int m=0, int n=0)// Khoi tao la ma tran co cac phan tu tren 
    		{                       // duong cheo chua phan tu [0][0]=1, con lai =0    
    			NumRow=m;
    			NumCol=n;
    			Array =new Ty*[NumRow];
    			for(int i=0; i<NumRow; i++) Array[i]=new Ty[NumCol];
    			for(i=0; i<NumRow; i++)
    				for(int j=0; j<NumCol; j++)
    				{
    					if (i==j) Array[i][j]=1;
    					else Array[i][j]=0;
    				}
    		}
    		//------
    		Matrix(Matrix& ma)  // Ham thiet lap sao chep
    		{
    			int i,j;
    
    			NumRow=ma.NumRow;
    			NumCol=ma.NumCol;
    			Array =new Ty*[NumRow];
    			for(i=0; i<NumRow; i++) Array[i]=new Ty[NumCol];
    			for(i=0; i<NumRow; i++)
    				for(j=0; j<NumCol; j++)
    				{
    					Array[i][j]=ma.Array[i][j];
    				}
    		}
    		//------
    		~Matrix()
    		{
    			for(int i=0; i<NumRow; i++) delete Array[i];
    			delete Array;
    		}
    
    		void    input(char Name[]);    // Nhap Ma tran
    		void    output();   // In cac phan tu cua Vector
    		Matrix& operator= (Matrix& ma);
    		void    setMatUnit(int rank);  // Tao ma tran don vi (ma tran vuong)
    		Ty      getEle(int RowNum, int ColNum); // Lay 1 phan tu
    		void    setEle(int RowNum, int ColNum, Ty newvar); // Thay doi gia tri cua 1 phan tu
    		Vector<Ty>  getRow(int RowNum);  // Lay ra mot hang
    		Vector<Ty>  getCol(int ColNum);  // Lay ra mot cot
    		Matrix  getMat(int Row1,int Col1, int Row2, int Col2);//Lay Ma tran con: Row1<Row2 ; Col1<Col2
    		Matrix  chaRow(int RowNum, Vector<Ty>& vt);  // Change Row
    		Matrix  chaCol(int ColNum, Vector<Ty>& vt);  // Change Column
    		Matrix  delRow(int RowNum);   // delete Row
    		Matrix  delCol(int ColNum);   // delete Col
    		Matrix  perRow(int Row1, int Row2); // permute Row : doi cho 2 hang
    		Matrix  perCol(int Col1, int Col2); // permute Col : doi cho 2 cot
    		int     getNumRow();//Lay so hang
    		int     getNumCol();//Lay so cot
    		Matrix  operator+ (Matrix& ma);
    		Matrix  operator- (Matrix& ma);
    		Matrix  operator* (Matrix& ma);
    		Vector<Ty> operator* (Vector<Ty> vt);
    		Matrix  operator* (Ty k);
    		Matrix  traMat();  // transpose Matrix : chuyen vi
    		Ty      det(int rank);	// Tinh dinh thuc , rank : cap cua matran vuong
    		Matrix  inv(int rank);	// inverse: ma tran nghich dao
    
    		//Cac ham su dung khi mo phong
    		void   setTran(Ty dx, Ty dy, Ty dz); //Thiet lap ma tran tinh tien thuan nhat
    		void   setRotX(Ty angle); //Thiet lap ma tran thuan nhat quay quanh truc X 
    		void   setRotY(Ty angle); //Thiet lap ma tran thuan nhat quay quanh truc Y 
    		void   setRotZ(Ty angle); //Thiet lap ma tran thuan nhat quay quanh truc Z 
    		operator double* (); //Toan tu ep kieu ma tran ve kieu con tro (mang) 
    		operator float* ();
    		operator int* ();
    };
    đây là lớp matrix .Em muôn xây dựng một mảng để lưu các ma trận cấp 4x4
    Vậy bây giờ em khai báo một mảng matrix<double>p[16] ,rồi sau đó p[0]=matrix<double>(4,4).Theo các bác em làm như vậy có vấn đề gì ko?ma sao no cu báo lỗi"array not allowce size 0"

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Code:
    Matrix(int m=0, int n=0)
    bỏ mấy cái =0 đi bạn ơi ...
    code ra gió bão

  3. #3
    Ngày gia nhập
    08 2006
    Bài viết
    32

    Tớ đã làm được rồi.Do mình đặt vị trí khai báo kia sai vị trí.mình cứ tưởng la đã global ai ngơ lạo nhầm .à mình thấy m=0,n=0 co ảnh hương gì đâu ,nó chỉ là một giá trị defaut thôi.nếu bạn quên không nhập m,n thì no tự động lấy các giá trị này.mình thấy thầy hệ điều hành dạy nên co một bộ defaut các giá trị. .theo các bạn có đúng kô?

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    336

    uh =0 nên mới có lỗi "array not allowce size 0"
    code ra gió bão

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    C++ Code:
    1. ~Matrix()
    2.         {
    3.             for(int i=0; i<NumRow; i++) delete Array[i];
    4.             delete Array;
    5.         }
    Cái này delete nhầm rùi cậu à ?
    => delete[] Array !
    Đã được chỉnh sửa lần cuối bởi rox_rook : 15-09-2008 lúc 10:27 AM.

Các đề tài tương tự

  1. Mã nguồn C Lỗi Lỗi see reference to class template instantiation 'std::list<_Ty>' being khi sử dụng Iterator cho class tự xây dựng
    Gửi bởi Mr_Chan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 10-07-2013, 01:58 AM
  2. Thắc mắc Template (khuôn hình) trong danh sách liên kết đôi ?
    Gửi bởi oxfordthuongyeu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 25-06-2011, 03:42 PM
  3. Sử dụng con trỏ trong khuôn hình hàm(template)
    Gửi bởi tetuongrua trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 25-12-2010, 10:38 AM
  4. [ Solved ]Lỗi khi dùng template
    Gửi bởi kidyboy2003 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 13-10-2008, 01:01 AM
  5. [ Solved ]Standard template library
    Gửi bởi nguyenvanhien trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 15-09-2008, 02:29 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn