<< Chapter < Page Chapter >> Page >

#include<iostream.h>

struct Time

{

int Hour; // 0-23

int Minute; // 0-59

int Second; // 0-59

};

void PrintMilitary(const Time&); //prototype

void PrintStandard(const Time&); //prototype

int main()

{

Time DinnerTime;

//Thiet lap cac thanh vien voi gia tri hop le

DinnerTime.Hour = 18;

DinnerTime.Minute = 30;

DinnerTime.Second = 0;

cout<<"Dinner will be held at ";

PrintMilitary(DinnerTime);

cout<<" military time,"<<endl<<"which is ";

PrintStandard(DinnerTime);

cout<<" standard time."<<endl;

//Thiet lap cac thanh vien voi gia tri khong hop le

DinnerTime.Hour = 29;

DinnerTime.Minute = 73;

DinnerTime.Second = 103;

cout<<endl<<"Time with invalid values: ";

PrintMilitary(DinnerTime);

cout<<endl;

return 0;

}

//In thoi gian duoi dang gio quan doi

void PrintMilitary(const Time&T)

{

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

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

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

}

//In thoi gian duoi dang chuan

void PrintStandard(const Time&T)

{

cout<<((T.Hour == 12) ? 12 : T.Hour % 12)

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

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

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

}

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

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

Có một vài hạn chế khi tạo các kiểu dữ liệu mới với các cấu trúc ở phần trên. Khi việc khởi tạo không được yêu cầu, có thể có dữ liệu chưa khởi tạo và các vấn đề nảy sinh. Ngay cả nếu dữ liệu được khởi tạo, nó có thể khởi tạo không chính xác. Các giá trị không hợp lệ có thể được gán cho các thành viên của một cấu trúc bởi vì chương trình trực tiếp truy cập dữ liệu. Chẳng hạn ở ví dụ 3.1 ở dòng 23 đến dòng 25, chương trình gán các giá trị không hợp lệ cho đối tượng DinnerTime. Nếu việc cài đặt của struct thay đổi, tất cả các chương trình sử dụng struct phải thay đổi. Điều này do lập trình viên trực tiếp thao tác kiểu dữ liệu. Không có "giao diện" để bảo đảm lập trình viên sử dụng dữ liệu chính xác và bảo đảm dữ liệu còn lại ở trạng thái thích hợp. Mặt khác, cấu trúc trong C không thể được in như một đơn vị, chúng được in khi các thành viên được in. Các cấu trúc trong C không thể so sánh với nhau, chúng phải được so sánh thành viên với thành viên.

Phần sau cài đặt lại cấu trúc Time ở ví dụ 3.1 như một lớp và chứng minh một số thuận lợi để việc tạo ra cái gọi là các kiểu dữ liệu trừu tượng (Abstract Data Types – ADT) như các lớp. Chúng ta sẽ thấy rằng các lớp và các cấu trúc có thể sử dụng gần như giống nhau trong C++. Sự khác nhau giữa chúng là thuộc tính truy cập các thành viên.

Cài đặt một  kiểu dữ liệu trừu tượng với một lớp

Các lớp cho phép lập trình viên mô hình các đối tượng mà có các thuộc tính (biểu diễn như các thành viên dữ liệu – Data members) và các hành vi hoặc các thao tác (biểu diễn như các hàm thành viên – Member functions). Các kiểu chứa các thành viên dữ liệu và các hàm thành viên được định nghĩa thông thường trong C++ sử dụng từ khóa class, có cú pháp như sau:

class<class-name>

{

<member-list>//Thân của lớp

};

Trong đó:

class-name: tên lớp.

member-list: đặc tả các thành viên dữ liệu và các hàm thành viên.

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