C++ Constructor - Cơ bản


Diễn đàn chia sẻ kiến thức, kinh nghiệm về IT và cuộc sống!
 
Trang ChínhGalleryTìm kiếmLatest imagesĐăng kýĐăng Nhập
Top posters
Sakura (1124)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
hotboy (705)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
Già Làng (373)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
con_ca_nho90 (289)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
that_true (154)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
theanhkkt (143)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
phamay (137)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
lovelonelyman (134)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
o0ovioletstaro0o (128)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
stevenhung (122)
C++ Constructor -  Cơ bản Vote_lcapC++ Constructor -  Cơ bản Voting_barC++ Constructor -  Cơ bản Vote_rcap 
Âm - Dương lịch
Clock
Logo
11TH02 Pro!
Liên kết
Tin tức 60s
Tin công nghệ
Thời sự 24h
Game Moblie

Share
 

 C++ Constructor - Cơ bản

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Sakura

C++ Constructor -  Cơ bản Stars7
Sakura

Thú CƯng : C++ Constructor -  Cơ bản I-hate-Cats-icon
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 34
Đến từ : Bình Dương
Ngề nghiệp : IT Student

C++ Constructor -  Cơ bản Empty
Bài gửiTiêu đề: C++ Constructor - Cơ bản   C++ Constructor -  Cơ bản I_icon_minitime20/7/2010, 23:04

Constructor – bộ khởi tạo cho đối tượng.


Editor Edward_Thien


Mục đích: khởi tạo
các giá trị mặc định ban đầu có trong hàm constructor này, vì khi đối tượng được
khai báo khởi tạo thì constructor của nó
sẽ được gọi đầu tiên trong chương trình.



Cú pháp:


Code:
[color=black]class_name(các_đối_số_(nếu_có))[/color]
[color=black]{[/color]
[color=black]//khai báo khởi tạo cho đối tượng[/color]
[color=black]}[/color]
[color=black]Ví dụ:[/color]
[color=black]class AA[/color]
[color=black]{[/color][color=black]
  A()[/color]
[color=black]                {[/color]
[color=black]                                //Cac khai bao khoi tao[/color]

}

[color=black]};[/color]

Có 3 loại constructor:
1. Constructor mặc định – không có tham số
2. Constructor có tham số
3. Constructor sao chép

1 ứng dụng rõ nét cho các bạn hình dung là khi bạn khai báo 1 con người thì ít nhất bạn cũng cần phải
có cái tên ban đầu và số tuổi của họ đúng ko? Và đây là tôi khởi tạo 1 đối tượng
con người có tên ban đầu là Nguyen Van A, và tuổi là 0:

Code:

[color=black]#include [/color]
[color=black]#include [/color]
[color=black]#include [/color]
[color=black]using namespace std;[/color]
[color=black]class Person[/color]
[color=black]{[/color]
[color=black]public:[/color]
[color=black]char name[30];[/color]
[color=black]unsigned age;[/color]
[color=black]Person()[/color]
}
[color=black]age = 0;[/color]
[color=black]strcpy(name,
"Nguyen Van A");[/color]
[color=black]}[/color]
[color=black]};[/color]
[color=black]int main()[/color]
[color=black]{[/color]
[color=black]                Person c;[/color]
[color=black]cout<<"Name: "<<<", Age = "<[/color]
[color=black]_getch();[/color]
[color=black]return 0;[/color]
[color=black]}[/color]

Sau đây chúng ta sẽ lần lượt tìm hiểu về 3 loại
này!

1. Constructor mặc định – không có tham số:
Code:
 [color=black]#include [/color]
 [color=black]#include [/color]
 [color=black]using namespace std;[/color]
 [color=black]class Constructor[/color]
 [color=black]{[/color]
 [color=black]public:[/color]
 [color=black]Constructor()[/color]
 [color=black]{[/color]
 [color=black]cout<<"Khoi Tao Gia Tri Dau Tien Cho Doi Tuong";[/color]
 [color=black]}[/color]
 [color=black]};[/color]
 [color=black]int main()[/color]
 [color=black]{[/color]
 [color=black]Constructor c;[/color]
 [color=black]_getch();[/color]

 [color=black]return 0;[/color]
 [color=black]}[/color]

Ta thấy chương trình này, class Constructor có 1 hàm khởi tạo Constructor không có tham số. và trong hàm main, khi đối tượng c được tạo thì tự động cái hàm Constructor sẽ được gọi. thêm 1 ví dụ nữa nhá


Code:
[color=black]#include [/color]
[color=black]#include [/color]
[color=black]using namespace std;[/color]
[color=black]class Constructor[/color]
[color=black]{[/color]
[color=black]public:[/color]
[color=black]int a;[/color]
[color=black]                int b;[/color]
[color=black]Constructor()[/color]
[color=black]{[/color]
[color=black]a= b = 100;[/color]
[color=black]}[/color]
[color=black]};[/color]
[color=black]int main()[/color]
[color=black]{[/color]
[color=black]                Constructor c;[/color]
[color=black]cout<<"a = "<<<", b = "<[/color]
[color=black]_getch();[/color]
[color=black]return 0;[/color]
[color=black]}[/color]

Ta thấy, trong ct này, ta biến đổi tí xíu, class Constructor có 2 biến thành viên a, b. và hàm Constructor sẽ có nhiệm vụ khởi tạo giá trị ban đầu cho chúng là 100. Khi đối tượng c đc tạo trong main thì mặc nhiên, 2 thuộc tính của đối tượng c sẽ có giá trị là 100.


2. Constructor có tham số

Cái này linh động hơn, ta sẽ chủ động khởi tạo giá trị cho đối tượng là bao nhiêu tùy thích, hơi khó hiểu, nhưng nhìn chương trình các bạn sẽ rõ :
Code:

[color=black]#include [/color]
[color=black]#include [/color]
[color=black]using namespace std;[/color]
[color=black]class Constructor[/color]
[color=black]{[/color]
[color=black]public:[/color]
[color=black]int a;[/color]
[color=black]int b;[/color]
[color=black]Constructor(int c, int d)[/color]
[color=black]{[/color]
[color=black]a = c;[/color]
[color=black]b = d;[/color]
[color=black]}[/color]
[color=black]};[/color]
[color=black]int main()[/color]
[color=black]{[/color]
[color=black]Constructor c(4,7);[/color]
[color=black]cout<<"a= "<<<", b = "<[/color]
[color=black]_getch();[/color]
[color=black]return 0;[/color]

[color=black]}[/color]





ở đây, khi vào main ta mới quyết định khỏi tạo giá trị ban đầu cho đối tượng là bao nhiêu. Và đây là 1 ví dụ về lớp người:


Code:
[color=black]#include [/color]
[color=black]#include [/color]
[color=black]#include [/color]

[color=black]using namespace std;[/color]
[color=black]class Person[/color]
[color=black]{[/color]
[color=black]public:[/color]
[color=black]char name[30];[/color]
[color=black]unsigned age;[/color]
[color=black]Person(char n[30], unsigned t)[/color]
[color=black]{[/color]
[color=black]age = t;[/color]
[color=black]strcpy(name, n);[/color]
[color=black]}[/color]
[color=black]};[/color]
[color=black]int main()[/color]
[color=black]{[/color][color=black]
Person c("Le Xuan Hoang",20);[/color]
[color=black]cout<<"Name: "<<<", Age = "<[/color]
[color=black]_getch();[/color]
[color=black]return 0;[/color]
[color=black]}[/color]
3. Constructor sao chép


Khi trong lớp có các thuộc tính là con trỏ thì việc ta gán giá trị của 1 đối tượng cho 1 đối tượng khác là việc làm đc cho là sai lầm trầm trọng, vì khi đó chúng ta sẽ nhận đc 1 con trỏ trỏ đến vùng nhớ thuộc đối tượng kia đang quản lý à 2 đối tượng cùng nắm giữ 1 vùng nhớ à tai hại! (ai ko hiểu cứ ppm trực tiếp qua Y!M của mình:D). do đó, ta sẽ dùng bộ khởi dựng sao chép, với cái tên của nó thôi cũng đủ hiểu là ta chỉ sao chép dữ liệu chứ không sao chép cái vùng nhớ của anh kia.!
Code:
[table style="width: 600pt;" class="MsoNormalTable" border="0" cellpadding="0" width="800"][tr style=""][td style="padding: 0.75pt;"]<table style="background: none repeat scroll 0% 0% white;" class="MsoNormalTable" border="0" cellpadding="0" cellspacing="0"><tr style=""><td style="padding: 2.25pt;" valign="top" nowrap="nowrap">[color=black]#include
    [b]class [/b]MyClass
    {
    [b]public[/b]:
        MyClass();                          // default constructor
        MyClass ([b]const [/b]MyClass &);          // copy constructor
        ~MyClass();                        // destructor
        [b]int [/b]GetAge() [b]const [/b]{ [b]return [/b]*itsAge; }
        [b]int [/b]GetWeight() [b]const [/b]{ [b]return [/b]*itsWeight; }
        [b]void [/b]SetAge([b]int [/b]age) { *itsAge = age; }
   
    [b]private[/b]:
        [b]int [/b]*itsAge;
        [b]int [/b]*itsWeight;
    };
   
    MyClass::MyClass()
    {
        itsAge = [b]new int[/b];
        itsWeight = [b]new int[/b];
        *itsAge = 5;
        *itsWeight = 9;
    }
   
    MyClass::MyClass([b]const [/b]MyClass & rhs)
    {
        itsAge = [b]new int[/b];
        itsWeight = [b]new int[/b];
        *itsAge = rhs.GetAge();
        *itsWeight = rhs.GetWeight();
    }
   
    MyClass::~MyClass()
    {
        [b]delete [/b]itsAge;
        itsAge = 0;
        [b]delete [/b]itsWeight;
        itsWeight = 0;
    }
   
    [b]int [/b]main()
    {
        MyClass myObject;
        std::cout << "myObject's age: " << myObject.GetAge() << "n";
        std::cout << "Setting myObject to 6...n";
        myObject.SetAge(6);
        std::cout << "Creating secondObject from myObjectn";
        MyClass secondObject(myObject);
        std::cout << "myObject's age: " << myObject.GetAge() << "n";
        std::cout << "secondObject' age: " << secondObject.GetAge() << "n";
        std::cout << "setting myObject to 7...n";
        myObject.SetAge(7);
        std::cout << "myObject's age: " << myObject.GetAge() << "n";
        std::cout << "boot's age: " << secondObject.GetAge() << "n";
        [b]return [/b]0;
    }[/color]
    </td></tr></table>
  [/td] [/tr] [tr style=""]  [td style="padding: 0.75pt;"] 
[color=black]myObject's age: 5[/color]
 
[color=black]Setting myObject to 6...[/color]
 
[color=black]Creating secondObject from myObject[/color]
 
[color=black]myObject's age: 6[/color]
 
[color=black]secondObject' age: 6[/color]
 
[color=black]setting myObject to 7...[/color]
 
[color=black]myObject's age: 7[/color]
 
[color=black]boot's age: 6[/color]
  [/td] [/tr][/table]





Cũng không khó hiểu lắm
cho những ai cố gắng muốn hiểu nhẩy?



Thế là OK phần
Constructor rồi nhé các bạn! phần tiếp theo là gì, mời các bạn đón theo dõi
nha !Very Happy



END
Về Đầu Trang Go down
tkhking

Member Năng Động


Member Năng Động
tkhking

Thú CƯng : C++ Constructor -  Cơ bản Panda-icon
Nam Pisces

Số bài viết : 114
Điểm : 135
Được cảm ơn : 1
Ngày sinh : 18/03/1990
Tham gia ngày : 01/07/2010
Tuổi : 34
Đến từ : Óc Trâu Lấy Ra
Ngề nghiệp : Student
Chăm ngôn : King

C++ Constructor -  Cơ bản Empty
Bài gửiTiêu đề: Re: C++ Constructor - Cơ bản   C++ Constructor -  Cơ bản I_icon_minitime21/7/2010, 00:38

thanks anh hoàng nha nhưng mà tui thấy ở khúc trên hơi dài dòng đó hihihi
Về Đầu Trang Go down
hoacodai

C++ Constructor -  Cơ bản Stars16
hoacodai

Thú CƯng : Khung Long
Nữ Aries

Số bài viết : 15
Điểm : 19
Được cảm ơn : 0
Ngày sinh : 12/04/1990
Tham gia ngày : 20/07/2010
Tuổi : 34
Đến từ : Taiwan

C++ Constructor -  Cơ bản Empty
Bài gửiTiêu đề: Re: C++ Constructor - Cơ bản   C++ Constructor -  Cơ bản I_icon_minitime21/7/2010, 13:22

tkhking đã viết:
thanks anh hoàng nha nhưng mà tui thấy ở khúc trên hơi dài dòng đó hihihi
Dài dòng nhưng có ích cho những bạn mới học là OK! kakak!
Chán thật, bị lỗi code ko à! để tui send luôn cái file Word cho lẹ. hehe
Link Đây: [You must be registered and logged in to see this link.]
Về Đầu Trang Go down
Sponsored content




C++ Constructor -  Cơ bản Empty
Bài gửiTiêu đề: Re: C++ Constructor - Cơ bản   C++ Constructor -  Cơ bản I_icon_minitime

Về Đầu Trang Go down
 

C++ Constructor - Cơ bản

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

 Similar topics

-
» Đối tượng toàn cục - Constructor vs Destructor

Permissions in this forum:Bạn không có quyền trả lời bài viết
IT World! :: HỌC TẬP :: Học Kỳ IV :: Lập Trình Hướng Dối Tượng(OOP)-