Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Ai giải thích giúp em

    Mã:
    #include<iostream>
    using namespace std;
    
    class Product
    {
    private:
    	int key;
    	Product *_next;
    public:
    	void CreateOneProduct();	//tạo 1 đối tượng mặt hàng
    	friend class List;
    };
    
    void Product::CreateOneProduct()
    {
    	cout << "nhap key= ";
    	cin >> key;
    	_next = NULL;
    }
    
    class List
    {
    private:
    	Product *_first;
    public:
    	List();
    	//dòng này bị sai 
    	//cách sửa void InsertFirst(Product &product);	
    	//tại sao lại dùng tham chiếu?
    	void InsertFirst(Product product);					
    };
    
    List::List()
    {
    	_first = NULL;
    }
    
    void List::InsertFirst(Product product)
    {
    	/*product= mặt hàng thêm vào đầu danh sách*/
    	if (_first == NULL)
    		_first = &product;
    	else
    	{
    		product._next = _first;
    		_first = &product;
    	}
    }
    
    void main()
    {
    	List L;
    	Product a, b;
    	a.CreateOneProduct();
    	b.CreateOneProduct();
    	L.InsertFirst(a);
    	L.InsertFirst(b);
    }
    1.cpp tại sao lại dùng tham chiếu

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nếu dùng tham trị: void InsertFirst(Product product);
    Thì hàm InertFirst sẽ tạo ra một biến "product CỦA HÀM InertFirst" rồi copy "product bạn truyền vào hàm" vô "product CỦA HÀM InertFirst", Khi thoát ra khỏi hàm, biến "product CỦA HÀM InertFirst" cũng không còn, chỉ còn "product bạn truyền vào hàm".

    LƯU Ý: "product CỦA HÀM InertFirst" và "product bạn truyền vào hàm" là hai biến hoàn toàn phân biệt, ở địa chỉ hoàn toàn khác nhau. Tới đây chắc bạn hiểu tại sao sai rồi?

    Nếu dùng tham chiếu void InsertFirst(Product &product);
    Thì hàm InsertFirst sẽ sử dụng "product bạn truyền vào hàm" làm biến của nó luôn. Tới đây chắc bạn hiểu tại sao tham chiếu lại đúng.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •