Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Tại sao dùng const trong trường hợp dùng biến tham chiếu

  1. #1
    Ngày gia nhập
    11 2011
    Nơi ở
    Hà Nội
    Bài viết
    8

    Mặc định Tại sao dùng const trong trường hợp dùng biến tham chiếu

    em mới vào , không biết bài này post ở đây có đúng k nữa, có gì mod chuyển giúp em, em tìm k thấy chỗ nào hợp cả
    ở đây em lấy ví dụ là 1 bài như thế này
    Xây dựng lớp vecto:
    - Thuộc tính: n (số chiều), tp(giá trị thành phần)
    - Phương thức: tạo, huỷ, tải bội các phép toán nhập, xuất, cộng, trừ, tích vô hướng

    và bài làm là như sau ạ:
    Code:
    #include<iostream.h>
    #include<conio.h>
    #include <math.h>
    class vecto
    {
        private: int n; float *a;
        public:
    	vecto()
    	{
    	    n=0;
    	    a=NULL;
    	}
    	~vecto()
    	{
    	  if(n) delete(a);
    	}
    	friend istream& operator>>(istream &in,vecto &vt);
    	friend ostream& operator<<(ostream &out,const vecto &vt);
    	const vecto& operator=(vecto &vt);             //phuong thuc toan tu gan
    	vecto (const vecto &vt);      //Ham tao sao chep
    	vecto operator+(const vecto &vt);
    	vecto operator-(const vecto &vt);
    	float operator*(const vecto &vt);
    
    };
    vecto::vecto(const vecto &vt)
    {
    	n=vt.n;
    	a=new float[n];
    	for(int i=0;i<n;i++) a[i]=vt.a[i];
    }
    const vecto& vecto::operator=(vecto &vt)
    {
    	n=vt.n;
    	a=new float[n];
    	for(int i=0;i<n;i++) a[i]=vt.a[i];
    	return *this;
    }
    istream& operator>>(istream &in,vecto &vt)
    	{
    	    cout<<"Nhap so chieu cua vecto: "; in>>vt.n;
    	    vt.a=new float[vt.n];
    	    cout<<"Nhap cac phan tu cua vecto:\n ";
    	    for(int i=0;i<vt.n;i++)
    	    {	cout<<"a["<<i<<"]= ";
    		in>>vt.a[i];
    	    }
    	    return in;
    	}
    ostream& operator<<(ostream &out,const vecto &vt)
    	{   if(vt.n)
    		{out<<"(";
    		for(int i=0;i<vt.n;i++)
    		out<<vt.a[i]<<" ";
    		out<<")";
    		}
    		return out;
    	}
    
    vecto vecto::operator+(const vecto &vt)
    	{	vecto x;
    		if(n!=vt.n) {cout<<"\nKhong cong duoc 2 vecto nay do khac nhau so chieu";}
    		else{	x.n=n;
    			x.a=new float[n];
    			for(int i=0;i<n;i++)
    			 x.a[i]=a[i]+vt.a[i];
    		    }
    		return x;
    	}
    vecto vecto::operator-(const vecto &vt)
    	{	vecto x;
    		if(n!=vt.n) {  cout<<"\nKhong tru duoc 2 vecto nay do khac nhau so chieu";}
    		else{	x.n=n;
    			x.a=new float[n];
    			for(int i=0;i<n;i++)
    			 x.a[i]=a[i]-vt.a[i];
    		    }
    	return x;
    	}
    
    float vecto::operator*(const vecto &vt)
    	{	float tich=0;
    		if(n!=vt.n) cout<<"\nKhong tinh tich 2 vecto duoc nay duoc do khac nhau so chieu";
    		else{
    			for(int i=0;i<n;i++)
    				tich+=a[i]*vt.a[i];
    		    }
    		return tich;
    	}
    
    int main()
    {
        vecto vt1,vt2;
    	float Tich;
    	clrscr();
    	cout<<"\nNhap vecto 1: ";cin>>vt1;
    	cout<<"\nNhap vecto 2: "; cin>>vt2;
    	cout<<"\n";cout<<vt1; cout<<"; "; cout<<vt2;
    	cout<<"\n\nTong 2 vecto la: "<<vt1+vt2<<endl;
    	cout<<"\nHieu cua 2 vecto la: "<<vt1-vt2<<endl;
    	cout<<"\nTich vo huong cua 2 vecto la: "<<vt1*vt2<<endl;
    	getch();
    	return 0;
    }
    thực ra đây không phải bài em làm, và em chỉ lấy để làm ví dụ thôi ạ
    vấn đề em muốn hỏi là ở phần em đánh dấu chữ đỏ ấy, tại sao lại để "const" ở đó và nó có tác dụng gì thế ạ? mong các pro chỉ giáo
    Đang tìm kiếm chính bản thân mình...
    Searching.......99,99%!!!

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Sửa tiêu đề cho bạn nhé. Lần sau gửi bài nhớ đọc nội quy post bài nhé

    float operator*(const vecto &vt);
    - Bạn cần tìm hiểu về tham chiếu thì sẽ rõ hơn
    Mình giải thích qua loa thế này. Mọi sự thay đổi ở tham chiếu thì thay đổi bản thân đối tượng đó
    Khi bạn truyền tham chiếu vt vào hàm --- > tác động lên nó --- > có sự thay đổi

    Với toán tử * thì tham chiếu truyền vào là môt toán hạng nào đó. Toán hạng đó sau khi thực hiện phép tính * thì nó vẫn là nó (- >>Không được phép thay đổi)
    ----> Người thiết kế sợ có thằng nào đó làm thay đổi vt nên phải cho thêm từ khóa const để đảm bảo rằng. Sau khi cho mượn thằng vt thì nó vẫn là nó. Không có bất cứ thay đổi nào
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  3. #3
    Ngày gia nhập
    05 2011
    Bài viết
    299

    thế bạn hiểu thế nào về const, hiểu thế nào về tham chiếu?
    Tham chiều: khi thay đổi nội dung của tham chiếu thì biến bị tham chiếu cũng thay đổi theo.
    trong khi đó biến const dùng để ngăn cản sự thay đổi của biến/ hàm đó
    Câu hỏi đặt ra: nếu vậy thì việc dùng tham trị cũng có tác dụng không làm thay đổi nội dung của biến được dùng làm tham số, vậy tại sao phải dùng tham chiếu.
    trả lời: việc dùng tham chiếu sẽ tác động trực tiếp lên đối tượng mà không cần phải tạo ra 1 bản sao để tác động lên như truyền tham trị, vì vậy việc dùng tham chiếu và từ khóa const sẽ giúp chương trình nhanh hơn và gọn nhẹ hơn
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

  4. #4
    Ngày gia nhập
    11 2011
    Nơi ở
    Hà Nội
    Bài viết
    8

    à, vậy em có thể hiểu mục đích là mình viết dài hơn 1 chút nhưng làm cho chương trình chạy nhanh hơn 1 chút đúng không ạ? còn thì dùng tham trị cũng không khác gì mình dùng tham chiếu và thêm const phải không ạ?


    à cho em hỏi thêm 1 chút về chồng toán tử +,-,*,/, <<,>> nữa, tại sao khi viết hàm <<,>> thì dùng friend còn +,-,*,/ lại không dùng friend ạ?
    em cảm ơn,
    Đang tìm kiếm chính bản thân mình...
    Searching.......99,99%!!!

  5. #5
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi dinhdoong Xem bài viết
    à, vậy em có thể hiểu mục đích là mình viết dài hơn 1 chút nhưng làm cho chương trình chạy nhanh hơn 1 chút đúng không ạ? còn thì dùng tham trị cũng không khác gì mình dùng tham chiếu và thêm const phải không ạ?


    à cho em hỏi thêm 1 chút về chồng toán tử +,-,*,/, <<,>> nữa, tại sao khi viết hàm <<,>> thì dùng friend còn +,-,*,/ lại không dùng friend ạ?
    em cảm ơn,
    Bạn để friend cũng ko ai bảo gì bạn đâu Muốn biết rõ hơn thì tìm hiểu thêm về friend function
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  6. #6
    Ngày gia nhập
    11 2011
    Nơi ở
    Hà Nội
    Bài viết
    8

    Mặc định Tại sao dùng const trong trường hợp dùng biến tham chiếu

    Trích dẫn Nguyên bản được gửi bởi beautifulsoul84hung Xem bài viết
    Bạn để friend cũng ko ai bảo gì bạn đâu Muốn biết rõ hơn thì tìm hiểu thêm về friend function
    nghĩa là trong class đấy thì có hay không có friend thì vẫn dùng được bt như nhau ạ?

    em cảm ơn,
    Đang tìm kiếm chính bản thân mình...
    Searching.......99,99%!!!

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Từ khóa const có bài của mình rôi
    nghĩa là trong class đấy thì có hay không có friend thì vẫn dùng được bt như nhau ạ?
    bạn đã tìm hiểu về hàm bạn chưa mà phát biểu như vậy?

  8. #8
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trường hợp của bạn là cắn miếng lớn quá nên nhai mắc nghẹn.
    Bạn muốn học đốt giai đoạn nên tìm một cái code về nghiên cứu để hy vọng không phải trải qua phần học lý thuyết.

    Để hiểu được code trên, bạn cần phải tham khảo tuần tự những điều sau:

    - Cách thiết kế một class căn bản với đầy đủ hàm dựng, hàm sao chép
    - Cách lập các hàm chồng toán tử căn bản
    - Cách viết hàm/lớp friend
    - Cách bảo vệ đối tượng với từ khóa const

    Nếu bạn không học qua các phần này, bạn sẽ phải đặt câu hỏi dài dài. Mà rốt cuộc lại thì chẳng có gì nắm vững cả.

  9. #9
    Ngày gia nhập
    11 2011
    Nơi ở
    Hà Nội
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi trungkien45 Xem bài viết
    Từ khóa const có bài của mình rôi

    bạn đã tìm hiểu về hàm bạn chưa mà phát biểu như vậy?
    thì em đang tìm hiểu em mới lên đây hỏi chứ, bác biết gì thì nói hộ em cái
    ý em hỏi là cái hàm +,-,*/ ấy viết theo kiểu hàm bạn với viết theo kiểu hàm của class đó thì có khác gì nhau không ạ, chứ ý em k phải là chỉ đơn giản bỏ đi chữ friend, sợ bác lại hiểu nhầm

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Trường hợp của bạn là cắn miếng lớn quá nên nhai mắc nghẹn.
    Bạn muốn học đốt giai đoạn nên tìm một cái code về nghiên cứu để hy vọng không phải trải qua phần học lý thuyết.

    Để hiểu được code trên, bạn cần phải tham khảo tuần tự những điều sau:

    - Cách thiết kế một class căn bản với đầy đủ hàm dựng, hàm sao chép
    - Cách lập các hàm chồng toán tử căn bản
    - Cách viết hàm/lớp friend
    - Cách bảo vệ đối tượng với từ khóa const

    Nếu bạn không học qua các phần này, bạn sẽ phải đặt câu hỏi dài dài. Mà rốt cuộc lại thì chẳng có gì nắm vững cả.
    rất cảm ơn bác đã góp ý cho em
    Đã được chỉnh sửa lần cuối bởi beautifulsoul84hung : 04-02-2012 lúc 05:54 PM. Lý do: làm liền bài viết
    Đang tìm kiếm chính bản thân mình...
    Searching.......99,99%!!!

  10. #10
    Ngày gia nhập
    05 2011
    Bài viết
    299

    Trích dẫn Nguyên bản được gửi bởi dinhdoong Xem bài viết
    thì em đang tìm hiểu em mới lên đây hỏi chứ, bác biết gì thì nói hộ em cái
    ý em hỏi là cái hàm +,-,*/ ấy viết theo kiểu hàm bạn với viết theo kiểu hàm của class đó thì có khác gì nhau không ạ, chứ ý em k phải là chỉ đơn giản bỏ đi chữ friend, sợ bác lại hiểu nhầm
    trong giáo trình c++ cũng có nói về vấn đề hàm bạn mà nhỉ?
    t.b: vui lòng đọc nội quy trước khi post bài
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

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

  1. Dùng Kiểu tham chiếu trong hàm ủy quyền ??
    Gửi bởi tldh.89 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 01-01-2014, 01:04 PM
  2. Bài tập C Bài tập tính lãi ngân hàng dùng đệ quy hoặc tham chiếu, tham trị
    Gửi bởi thaohoangf trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 08-10-2012, 08:24 AM
  3. Dùng biến tham chiếu trong khai báo hàm ở ngôn ngữ C#?
    Gửi bởi egr trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 19-05-2010, 11:09 PM
  4. Con trỏ và tham chiếu trong C++, công dụng và cách dùng
    Gửi bởi punkrock trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 20-05-2009, 03:44 PM
  5. cho hỏi về cách dùng Tham biến và tham trị trong C++
    Gửi bởi dta4c trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-01-2008, 10:18 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