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 8 của 8
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cách viết hàm chồng cho phép = như thế nào?

    Mã:
    typedef struct sinhvien   // khai bao 1 cau truc la sinh vien
    {
    	int masv;  // ma sinh vien
    	char hoten[30]; // ho ten
    	char lop[15]; // lop
    	float diemtb; // diem trung binh
    	struct sinhvien *tiep; // dung de tro sang phan tu tiep theo ( su dung co che fifo)
    }sv;
    mình có 1 cấu trúc như vậy giờ mình muốn viết một hàm chồng cho phép = để thuận tiện trong việc sắp xếp dữ liệu trong danh sách. Nhưng mà mình không viết được do chưa nắm được cách viết cho lắm. Ai đó viết giùm mình để mình có thể đả thông đoạn này cái. thank!

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    có ai đang lang thang đêm khuya thì giúp mình cái mai có tiết chữa bài tập rồi!

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thấy bạn cần nên nháy đúp vào cái vc
    bạn xem được chưa nhé, mình không quen typedef nên bỏ đi nha, mình để nguyên cái code của bạn đấy:
    Mã nguồn PHP:
    #include <iostream>#include <string.h>using namespace std;struct sinhvien // khai bao 1 cau truc la sinh vien{ int masv; // ma sinh vien char hoten[30]; // ho ten char lop[15]; // lop float diemtb; // diem trung binh sinhvien *tiep; // dung de tro sang phan tu tiep theo ( su dung co che fifo) void show(){cout << "masv: " << masv << " hoten: " << hoten << " lop: "<< lop << " tb: " << diemtb << endl; } sinhvien& operator = (const sinhvien&); };sinhvien& sinhvien::operator=(const sinhvien &a){ masv=a.masv; diemtb=a.diemtb; strcpy(hoten,a.hoten); strcpy(lop,a.lop); tiep=a.tiep; return *this;}int main(){ sinhvien a; a.masv=5; strcpy(a.hoten,"vietduc"); strcpy(a.lop,"cvet"); a.diemtb=9; a.tiep=NULL; sinhvien b; b=a; a.masv=6; strcpy(a.hoten,"vietduc111"); strcpy(a.lop,"cvet111"); a.diemtb=91; a.tiep=NULL; a.show(); b.show(); return 0;}  

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cảm ơn bạn nhiều. Bạn có thể giải thích tại sao lại có mấy cái sinhvien& sinhvien:: với tác dụng của const và tại sao phải là &a được không?
    mình đọc tài liêu thấy ghi là (kiểu trả về ) operator (toán tử)(danh sách tham số) nên mình chưa thực sự hiểu được vấn đề cho lắm

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi hoaxuyenchi
    cảm ơn bạn nhiều. Bạn có thể giải thích tại sao lại có mấy cái sinhvien& sinhvien:: với tác dụng của const và tại sao phải là &a được không?
    mình đọc tài liêu thấy ghi là (kiểu trả về ) operator (toán tử)(danh sách tham số) nên mình chưa thực sự hiểu được vấn đề cho lắm
    bạn đọc hướng đối tượng phần toán tử đấy, ở đó có đầy đủ hết rồi mà:
    "(kiểu trả về ) operator (toán tử)(danh sách tham số)"
    kiểu trả về là sinhvien&, cho toán tử gán "=", tham số là 1 đứa sinh viên khác
    &a để cho nó truyền tham biến vào cho nhanh, cái const trước a để không làm thay đổi cái a
    sinhvien& sinhvien::
    sinhvien& (kiểu trả về )
    sinhvien:: <? như kiểu bảo là hàm này là thuộc về struct sinh viên>

  6. #6
    cảm ơn bạn đã giúp đỡ. cơ bản đã hiểu. Nhưng còn thắc mắc cái là mình điền
    sinhvien& thanh sinhvien thì vẫn đúng vậy bạn sử dụng thêm dấu & sau tên của kiểu để làm gì?

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi hoaxuyenchi
    cảm ơn bạn đã giúp đỡ. cơ bản đã hiểu. Nhưng còn thắc mắc cái là mình điền
    sinhvien& thanh sinhvien thì vẫn đúng vậy bạn sử dụng thêm dấu & sau tên của kiểu để làm gì?
    1 số trường hợp đúng, 1 số trường hợp sai, sách ghi sao thì mình ghi vậy, chả biết...

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Giá trị trả về của hàm opeator= phụ thuộc vào mục đich sử dụng của biểu thức gán. Chúng ta chọn giải pháp trả về tham chiếu đứng bên trái dấu = nhằm giữ 2 tính chất quan trọng của phép gán
    + trật tự kết hợp từ phải sang trái
    + Có thể sử dụng kết quả biểu thức gán trong các biểu thức khác
    Ngoài ra giải pháp này cũng hạn chế việc sao chép dữ liệu từ nơi này đi nơi khác trong bộ nhớ
    có lẽ là 1 trong các lí do này

 

 

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
  •