Announcement

Collapse
No announcement yet.

Minh họa của Template và Exception

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Minh họa của Template và Exception

    Code thực hành ngày 15-08

    Bài 2: Cài đặt một lớp template cho stack sử dụng mảng động..
    Code:
    // OOP2.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "iostream"
    #include "conio.h"
    
    using namespace std;
    template <class T>
    class Stack
    {
    private:
    	int Num;
    	T* A;
    public:
    	Stack()
    	{
    		A = new T[10];
    		Num=0;
    	}
    
    	void Push(T x)
    	{
    		A[Num]=x;
    		Num++;
    		cout<<"da push: "<<x<<endl;
    	}
    
    	T Pop()
    	{
    		Num--;
    		return A[Num];
    	}
    
    };
    main()
    {
    	Stack<int> ss;
    	for(int i=1;i<=11;i++)
    	{
    		ss.Push(i);
    	}
    	for(int i=1;i<=11;i++)
    	{
    		cout<<ss.Pop()<<endl;
    	}
    	
    	getch();
    	return 0;
    }
    Bài 3:
    Trong C++, phép toán new được dùng để cấp phát bộ nhớ. Khi không cấp phát được bộ nhớ cho con trỏ thì con trỏ sẽ có giá trị NULL. Hãy cài đặt lại các lớp exception với tên gọi là ErrorMemory để kiểm tra việc cấp phát này.


    Code:
    #include "stdafx.h"
    #include "iostream"
    #include "conio.h"
    
    using namespace std;
    template <class T>
    class Stack
    {
    private:
    	int Num;
    	T* A;
    public:
    	Stack()
    	{
    		A = new T[10];
    		if(A==NULL)
    			throw ErrorStack();
    		Num=0;
    	}
    
    	void Push(T x)
    	{
    		if(Num==10)
    			throw ErrorStack();
    		A[Num]=x;
    		Num++;
    		cout<<"da push: "<<x<<endl;
    	}
    
    	T Pop()
    	{
    		if(Num==0)
    			throw ErrorStack();
    		Num--;
    		return A[Num];
    	}
    
    };
    
    class ErrorStack
    {
    public:
    	ErrorStack()
    	{
    	}
    	void ErrFull()
    	{
    		printf("\nKhong cap phat duoc.");
    	}
    	void ErrPop()
    	{
    		printf("\nKhong co du lieu de Pop.");
    	}
    	void ErrPush()
    	{
    		printf("\nKhong Push them vao duoc.\n\n");
    	}
    };
    
    int main()
    {
    	try
    	{
    		Stack<int> ss;
    		try
    		{
    			for(int i=1;i<=11;i++)
    			{
    				ss.Push(i);
    			}
    		}
    		catch(ErrorStack& e)
    		{
    			e.ErrPush();
    		}
    		try
    		{
    			for(int i=1;i<=11;i++)
    			{
    				cout<<ss.Pop()<<endl;
    			}
    		}
    		catch(ErrorStack& e)
    		{
    			e.ErrPop();
    		}
    	}
    	catch(ErrorStack& e)
    	{
    		e.ErrFull();
    
    	}
    	
    	getch();
    	return 0;
    }
    Last edited by BiThuDoan; 15-08-2011, 23:30.

  • #2
    Originally posted by 08520228 View Post
    Code thực hành ngày 15-08

    Bài 2: Cài đặt một lớp template cho stack sử dụng mảng động..
    ..................................
    ...................................

    Bài 3:
    Trong C++, phép toán new được dùng để cấp phát bộ nhớ. Khi không cấp phát được bộ nhớ cho con trỏ thì con trỏ sẽ có giá trị NULL. Hãy cài đặt lại các lớp exception với tên gọi là ErrorMemory để kiểm tra việc cấp phát này.


    Code:
    ..................
    Mình góp ý xíu :
    - Code trên còn thiếu,sai nhiều quá.
    - Trong C++ chuẩn: new thất bại throw ra Exception là std::bad_alloc chứ không phải là như bạn trên nói.Nếu không muốn throw ra Exception này khi new thất bại thì dùng từ khóa nothrow để return NULL khi new thất bại ( thay vì throw bad_alloc )
    -Khi 1 class có sử dụng member là pointer để cấp phát động thì nên implement luôn: Copy Contructor ,toán tử = ( dạng Deep Copy) ,destructor .
    - Hàm main : ghi rõ kiểu trả về. Cách code trên tùm lum. Khuyên dùng int main và nhớ return .
    - Cách include thư viện cũng không đc ổn nữa .Khác nhau giữa #include<> và #include"" là j?
    -
    Last edited by 08520016; 16-08-2011, 02:24.

    Im a british accent lover

    Comment


    • #3
      Originally posted by 08520016 View Post
      Mình góp ý xíu :
      - Code trên còn thiếu,sai nhiều quá.
      - Trong C++ chuẩn: new thất bại throw ra Exception là std::bad_alloc chứ không phải là như bạn trên nói.Nếu không muốn throw ra Exception này khi new thất bại thì dùng từ khóa nothrow để return NULL khi new thất bại ( thay vì throw bad_alloc )
      -Khi 1 class có sử dụng member là pointer để cấp phát động thì nên implement luôn: Copy Contructor ,toán tử = ( dạng Deep Copy) ,destructor .
      - Hàm main : ghi rõ kiểu trả về. Cách code trên tùm lum. Khuyên dùng int main và nhớ return .
      - Cách include thư viện cũng không đc ổn nữa .Khác nhau giữa #include<> và #include"" là j?
      -
      Nếu code trên còn sai nhiều vậy thì mong anh post 1 bài hoàn chỉnh để mọi người tham khảo.

      Comment

      LHQC

      Collapse
      Working...
      X