Sakura
Thú CƯng :
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
| Tiêu đề: C++ Constructor - Cơ bản 20/7/2010, 23:04 | |
| Constructor – bộ khởi tạo cho đối tượng.Editor Edward_ThienMụ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ép1 ứ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épKhi 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 !END |
|
tkhking
Member Năng Động
Thú CƯng :
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
| Tiêu đề: Re: C++ Constructor - Cơ bản 21/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 |
|
hoacodai
Thú CƯng :
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
| Tiêu đề: Re: C++ Constructor - Cơ bản 21/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.] |
|
Sponsored content
| Tiêu đề: Re: C++ Constructor - Cơ bản | |
| |
|