Tại sao cần hàm khởi tạo trong lập trình hướng đối tượng trên C++?
Tại sao cần hàm khởi tạo trong lập trình hướng đối tượng trên C++?
//em có đoạn code sau ,nhập 2 điểm trong tọa độ oxy
#include
#include
class point
{
private:
int x;
int y;
public:
void
init(int ox,int oy)//hàm khởi tạo {
cout<<"ham thanh phan init";
x=ox;y=oy}
.....
void main(void){
point
p;
p.init(2,3);
cho em hỏi sao lại cần hàm khởi tạo làm gì ,sao ko dùng luôn x,y để nhập tọa độ ?thanks all
Đã được chỉnh sửa lần cuối bởi rox_rook : 03-06-2009 lúc 02:57 PM.
@tranmanh: Đưa code vào tag Cái hàm init của bạn không phải hàm
tạo đâu. Hàm tạo(constructor) là 1 phương thức có tên trùng với tên của lớp.Nếu không khai báo hàm tạo thì trình biên dịch sẽ tự tạo ra các hàm này.
Lập trình OOP: yêu cầu đọc tính chất 1: tính đóng gói (encapsulation)
Ước mơ vươn tới Linux Developer. Đang trong quá trình tập luyện: 1. C system programming 2. GNU
distribution 3. Gtk+/Gnome Application Programming. Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!
Nguyên bản được gửi bởi tranmanh
//em có đoạn code sau ,nhập 2 điểm trong tọa độ oxy
#include #include class point { private: int x; int y; public: void init(int ox,int oy) //hàm khởi tạo {
cout <<"ham thanh phan init"; x=ox;y=oy} ..... void main(void){ point p; p.init(2,3);
cho em hỏi sao lại cần hàm khởi tạo làm gì ,sao ko dùng luôn x,y để nhập tọa độ ?thanks all
không dùng x, y được vì 2 thuộc tính x, y đã được thiết lập private rồi, chỉ dùng được trong phạm vi class Point thôi
trong hàm main (tức là ngoài class Point) muốn nhập tọa độ phải qua hàm init
cho mình hỏi ngu một chút: Nếu chương trình biên dịch đã tự động xây dựng hàm khởi tạo rồi thì mình cần gì phải xây dựng nhỉ? Một số chương trình mình vẫn thấy có hàm tạo mà
Tại sao cần hàm khởi tạo trong lập trình hướng đối tượng trên C++?
Nguyên bản được gửi bởi ngoctrung903
cho mình hỏi ngu một chút: Nếu chương trình biên dịch đã tự động xây dựng hàm khởi tạo rồi
thì mình cần gì phải xây dựng nhỉ? Một số chương trình mình vẫn thấy có hàm tạo mà
Hỏi [ngu] thật. Có thể bạn đi ăn phở chỉ gọi một tiếng "phở". Nhưng hầu hết mọi người đều kèm theo yêu cầu đặc thù của mình, vd phở tái nạm tô lớn nhiều nước béo, ... Hàng tự động chỉ áp dụng cho yêu cầu tổng quát. Có những lúc hàng tổng quát không hợp thì phải dùng hàm khởi tạo để đạt các tính chất đặc thù.
Nguyên bản được gửi bởi VoTichSu
Hỏi [ngu] thật. Có thể bạn đi ăn phở chỉ gọi
một tiếng "phở". Nhưng hầu hết mọi người đều kèm theo yêu cầu đặc thù của mình, vd phở tái nạm tô lớn nhiều nước béo, ... Hàng tự động chỉ áp dụng cho yêu cầu tổng quát. Có những lúc hàng tổng quát không hợp thì phải dùng hàm khởi tạo để đạt các tính chất đặc thù.
Thực ra bạn không nên nặng lời vậy, người mới người ta chưa hiểu thì đôi khi hỏi một số câu hỏi hơi ngốc thôi, hồi xưa khi mới học mình cũng có những câu hỏi kiểu vậy.
Bạn à, khi ta không tạo hàm tạo thì máy sẽ tạo
ra hàm tạo mặc định có chức năng là KHÔNG LÀM GÌ CẢ. Còn hàm tạo của chúng ta thì để phục vụ cho mục đích của chúng ta, nó sẽ được gọi tự động khi bạn tạo ra một đối tượng mới. Ta nên sự tạo hàm tạo vào hàm hủy để kếm soát vùng nhớ. Trong hàm tạo nên set lại giá trị mặc định cho các biến của lớp, set null cho các con trỏ, nhờ vậy các biến không bị giá trị random khi mình thực thi chương trình. Việc các biến có giá trị ngẩu nhiên dễ gây ra lỗi và khó debug. Còn hàm hủy để hủy các đối
tượng, giải phóng vùng nhớ đã cấp phát tránh lãng phí vùng nhớ.
Tin học là gì. Là lỡ tin mới học đó
Nguyên
bản được gửi bởi daotien0887
Thực ra bạn không nên nặng lời vậy, người mới người ta chưa hiểu thì đôi khi hỏi một số câu hỏi hơi ngốc thôi, hồi xưa khi mới học mình cũng có những câu hỏi kiểu vậy. ...
Từ ấy tôi
đã gói trong ngoặc vuông, ngụ ý là gì thì bạn phải tìm hiểu về cách viết từ trong ngoặc vuông. Bạn dùng nguyên tắc gì để kết luận nó là nặng?
Đã được chỉnh sửa lần cuối bởi VoTichSu : 11-09-2012 lúc 08:09 AM.
bạn nên tự viết hàm tạo cho lớp để khi khai báo 1 đối tượng của lớp đó, bạn kiểm soát được giá trị khởi tạo của nó nếu bạn để trình biên dịch tự làm thì
bạn không biết giá trị của nó là gì -> có thể phát sinh lỗi
cũng như khi khai báo 1 biến ta nên gán luôn 1 giá trị cho nó vậy mình cũng đang học, có j sai sót mong mọi người góp ý!