<< Chapter < Page Chapter >> Page >

void Time::PrintMilitary()

{

cout<<(Hour<10 ? "0" : "")<<Hour<<":"

<<(Minute<10 ? "0" : "")<<Minute<<":"

<<(Second<10 ? "0" : "")<<Second;

}

//Hien thi thoi gian theo dang chuan: HH:MM:SS AM (hoac PM)

void Time::PrintStandard()

{

cout<<((Hour == 0 || Hour == 12) ? 12 : Hour % 12)

<<":"<<(Minute<10 ? "0" : "")<<Minute

<<":"<<(Second<10 ? "0" : "")<<Second

<<(Hour<12 ? " AM" : " PM");

}

int main()

{

Time T1,T2(2),T3(21,34),T4(12,25,42),T5(27,74,99);

cout<<"Constructed with:"<<endl<<"all arguments defaulted:"<<endl<<" ";

T1.PrintMilitary();cout<<endl<<" ";

T1.PrintStandard();

cout<<endl<<"Hour specified; Minute and Second defaulted:"<<endl<<" ";

T2.PrintMilitary();cout<<endl<<" ";

T2.PrintStandard();

cout<<endl<<"Hour and Minute specified; Second defaulted:"<<endl<<" ";

T3.PrintMilitary();cout<<endl<<" ";

T3.PrintStandard();cout<<endl<<"Hour, Minute, and Second specified:"<<endl<<" ";

T4.PrintMilitary(); cout<<endl<<" ";

T4.PrintStandard();cout<<endl<<"all invalid values specified:"<<endl<<" ";

T5.PrintMilitary();cout<<endl<<" ";

T5.PrintStandard();cout<<endl;

return 0;

}

Chương trình ở ví dụ 3.7 khởi tạo năm đối tượng của lớp Time (ở dòng 52). Đối tượng T1 với ba tham số lấy giá trị mặc định, đối tượng T2 với một tham số được mô tả, đối tượng T3 với hai tham số được mô tả, đối tượng T4 với ba tham số được mô tả và đối tượng T5 với các tham số có giá trị không hợp lệ.

Chúng ta chạy ví dụ 3.7 , kết quả ở hình 3.7

Hình 3.7: Kết quả của ví dụ 3.7

Nếu không có constructor nào được định nghĩa trong một lớp thì trình biên dịch tạo một constructor mặc định. Constructor này không thực hiện bất kỳ sự khởi tạo nào, vì vậy khi đối tượng được tạo, nó không bảo đảm để trong một trạng thái phù hợp.

Sử dụng destructor

Một destructor là một hàm thành viên đặc biệt của một lớp. Tên của destructor đối với một lớp là ký tự ngã (~) theo sau bởi tên lớp.

Destructor của một lớp được gọi khi đối tượng được hủy bỏ nghĩa là khi sự thực hiện chương trình rời khỏi phạm vi mà trong đó đối tượng của lớp đó được khởi tạo. Destructor không thực sự hủy bỏ đối tượng – nó thực hiện "công việc nội trợ kết thúc" trước khi hệ thống phục hồi không gian bộ nhớ của đối tượng để nó có thể được sử dụng giữ các đối tượng mới.

Một destructor không nhận các tham số và không trả về giá trị. Một lớp chỉ có duy nhất một destructor – đa năng hóa destructor là không cho phép.

Nếu trong một lớp không có định nghĩa một destructor thì trình biên dịch sẽ tạo một destructor mặc định không làm gì cả.

Ví dụ 3.8: Lớp có hàm destructor

#include<iostream.h>

class Simple

{private:

int *X;

public:

Simple(); //Constructor

~Simple(); //Destructor

void SetValue(int V);

int GetValue();

};

Simple::Simple()

{ X = new int; //Cấp phát vùng nhớ cho X

}

Simple::~Simple()

{

delete X; //Giải phóng vùng nhớ khi đối tượng bị hủy bỏ.

}

void Simple::SetValue(int V)

{

*X = V;

}

int Simple::GetValue()

{

return *X;

}

int main()

{

Simple S;

int X;

cout<<"Enter a number:";

cin>>X;

S.SetValue(X);

cout<<"The value of this number:"<<S.GetValue();

return 0;

}

Chúng ta chạy ví dụ 3.8 , kết quả ở hình 3.8

Hình 3.8: Kết quả của ví dụ 3.8

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình hướng đối tượng. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10794/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?

Ask