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

Đề tài: Có thể gán giá trị cho con trỏ this trong lập trình C++???

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    64

    Mặc định Có thể gán giá trị cho con trỏ this trong lập trình C++???

    Mình có một bài toán như sau.
    - Xây dựng một lớp node:
    Code:
    #include <iostream>
    using namespace std;
    
    //Basic Doubly Linked List node class. 
    class DLLNode
    {
    public:
    	DLLNode() //Default Constructor
    	{
    		p_data = 0;    //No data.
    		p_next = NULL; //New node always has a NULL next node.
    		p_prev = NULL; //New node always has a NULL previous node.
    	}
    	DLLNode(unsigned int data) //Constructor
    	{
    		p_data = data; //No data.
    		p_next = NULL; //New node always has a NULL next node.
    		p_prev = NULL; //New node always has a NULL previous node.
    	}
    	unsigned int data(void) const //Retreive the data of the node. Constant function.
    	{
    		return p_data;
    	}
    	DLLNode* prev(void) const //Retreive the preivous pointer of the node. Constant function.
    	{
    		return p_prev;
    	}
    	DLLNode* next(void) const //Retreive the previous pointer of the node. Cosntant function.
    	{
    		return p_next;
    	}
    	void setdata(unsigned int data) //Set the data of the node. 
    	{
    		p_data = data;
    	}
    	void setprev(DLLNode* prev) //Set the previous pointer of the node.
    	{
    		p_prev = prev;
    	}
    	void setnext(DLLNode* next) //Set the next pointer of the node.
    	{
    		p_next = next;
    	}
    
    private:
    	unsigned int p_data; //Data stored by the node. protected.
    	DLLNode* p_prev;     //Pointer to the next node. protected.
    	DLLNode* p_next;     //Pointer to the previous node. protected.
    };
    
    ostream& operator << (ostream& out, DLLNode& node) //Output the data of a node.
    {
    	out << node.data() << " "; //Output the data of the node, followed by a space.
    	return out;                //Return the output stream.
    }
    - Sau đó, mình thêm vào lớp này một định nghĩa toán tử ++ như sau:
    Code:
    void operator ++ ()
    {
           this = p_next;
    }
    - Khi dịch chương trình (có đoạn code vừa thêm vào) thì trình biên dịch báo lỗi "error C2106: '=' : left operand must be l-value". Theo mình hiểu thì nguyên nhân là do kiểu của con trỏ this lúc này là "DDLNode* const". Làm cách nào để có thể khắc phục lỗi này đây? Ai giúp mình với !


    - Mục đích của mình là muốn tạo ra một danh sách, trong đó có con trỏ p_root (kiểu Node*) nằm ở đầu danh sách. Sau đó tạo ra 1 con trỏ khác là p_current. Lúc đầu ta gán p_current = p_root, khi thực hiện phép toán p_current++ thì p_current sẽ trỏ sang p_root->p_next,... cứ tiếp tục như vậy.
    I know... nothing

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    16

    con trỏ this là con trỏ đặc biệt nên bạn ko thể gán giá trị cho nó được.
    Đã được chỉnh sửa lần cuối bởi coolkid : 24-11-2007 lúc 10:04 PM.
    nothing is impossible

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

    khi xây dựng 1 list thì bạn chỉ nên quan tâm đến các method của đối tượng của lớp list thôi. Vì vậy mình thấy bạn đặt các thuộc tính p_next và p_prev là private có vẻ ko cần thiết lắm, làm như vậy mình cũng bỏ qua được bước override operator ++. Mình cũng có 1 đề nghị tại saothay vì mình override theo kiểu postfix (a++) thì mình chuyển thành override theo kiểu postfix(++a) thử xem.good luck
    nothing is impossible

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Không phải rồi . Cậu làm như thế sao được. Cậu không nên đa năng hóa ++ trong class Node mà phải trong chính lớp List
    class CList{
    operator ++()
    {
    this = this->pNext;
    }

    }
    thì ok.

  5. #5
    Ngày gia nhập
    05 2007
    Bài viết
    64

    Không phải rồi . Cậu làm như thế sao được. Cậu không nên đa năng hóa ++ trong class Node mà phải trong chính lớp List
    class CList{
    operator ++()
    {
    this = this->pNext;
    }

    }
    thì ok.
    - Mình muốn thực hiện phép toán ++ trên con trỏ thuộc class Node mà bạn, với lại trong lớp CList của bạn nói làm gì có thành phần p_next, thành phần này nằm trong Class Node mà. Bạn thử xem lại xem sao?
    I know... nothing

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