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ố 18 kết quả

Đề tài: Tại sao cần hàm khởi tạo trong lập trình hướng đối tượng trên C++?

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    9

    Mặc định 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
    C++ Code:
    1. #include <iostream.h>
    2. #include <conio.h>
    3. class point
    4. {
    5. private:
    6. int x;
    7. int y;
    8. public:
    9. void init(int ox,int oy) //hàm khởi tạo {
    10. cout <<"ham thanh phan init";
    11. x=ox;y=oy}
    12. .....
    13. void main(void){
    14. point p;
    15. 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.

  2. #2
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    @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.
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    186

    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 !!!

  4. #4
    Ngày gia nhập
    05 2009
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi tranmanh Xem bài viết
    //em có đoạn code sau ,nhập 2 điểm trong tọa độ oxy

    #include <iostream.h>
    #include <conio.h>
    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

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

    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à

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

    Mặc định Tại sao cần hàm khởi tạo trong lập trình hướng đối tượng trên C++?

    Trích dẫn Nguyên bản được gửi bởi ngoctrung903 Xem bài viết
    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ù.

  7. #7
    Ngày gia nhập
    04 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    30

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    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 đó

  8. #8
    Ngày gia nhập
    04 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    30

    thêm 1 chú ý nữa là khi tạo ra hàm tạo có đối số thì hàm tạo mặc định cũng mất nên phải khai báo thêm hàm tạo không đối số mặc dù nó có thể là không làm gì cả.

    Tin học là gì.
    Là lỡ tin mới học đó

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

    Trích dẫn Nguyên bản được gửi bởi daotien0887 Xem bài viết
    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.

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

    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 ý!

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

  1. Dữ liệu quá nhiều mà hiển thị trên trên màn hình 25x80 trong C.
    Gửi bởi muiyen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 12-10-2013, 01:00 PM
  2. So sánh 1 số đã nhập trên textbox với 1 số trong cột kiểu int trên SQL
    Gửi bởi dmttuan247 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 19-08-2012, 08:54 PM
  3. quản lý cửa sổ trong C#. Tạo form trong suốt trên C#? cho mình hỏi
    Gửi bởi namnt90 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 18-10-2010, 07:07 PM
  4. TÍnh số ngày trong tuần trong khoảng thời gian trên C#??
    Gửi bởi kiemphivn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 17-05-2009, 03:30 PM
  5. Hiện các control trên form trong suốt trong lập trình C#
    Gửi bởi dieucay555 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 20-07-2008, 07:48 AM

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