SLIDE1

Saturday, January 31, 2015

Lớp CLASS trong C++ || Lập trình OOP

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. Các hàm thành viên đôi khi được gọi là các phương thức (methods) trong các ngôn ngữ lập trình hướng đối tượng khác, và được đưa ra trong việc đáp ứng các message gởi tới một đối tượng. Một message tương ứng với việc gọi hàm thành viên. Khi một lớp được định nghĩa, tên lớp có thể được sử dụng để khai báo đối tượng của lớp theo cú pháp sau: <class-name> <object-name>; Chẳng hạn, cấu trúc Time sẽ được định nghĩa dưới dạng lớp như sau: class Time { public: Time(); void SetTime(int, int, int) void PrintMilitary(); void PrintStandard() private: int Hour; // 0 - 23 int Minute; // 0 - 59 int Second; // 0 - 59  };  Trong định nghĩa lớp Time chứa ba thành viên dữ liệu là Hour, Minute và Second, và cũng trong lớp này, chúng ta thấy các nhãn public và private được gọi là các thuộc tính xác định truy cập thành viên (member access specifiers) gọi tắt là thuộc tính truy cập.  Bất kỳ thành viên dữ liệu hay hàm thành viên khai báo sau public có thể được truy cập bất kỳ nơi nào mà chương trình truy cập đến một đối tượng của lớp. Bất kỳ thành viên dữ liệu hay hàm thành viên khai báo sau private chỉ có thể được truy cập bởi các hàm thành viên của lớp. Các thuộc tính truy cập luôn luôn kết thúc với dấu hai chấm (:) và có thể xuất hiện nhiều lần và theo thứ tự bất kỳ trong định nghĩa lớp. Mặc định thuộc tính truy cập là private. Định nghĩa lớp chứa các prototype của bốn hàm thành viên sau thuộc tính truy cập public là Time(), SetTime(), PrintMilitary() và PrintStandard(). Đó là các hàm thành viên public (public member function) hoặc giao diện (interface) của lớp. Các hàm này sẽ được sử dụng bởi các client (nghĩa là các phần của một chương trình mà là các người dùng) của lớp xử lý dữ liệu của lớp. Có thể nhận thấy trong định nghĩa lớp Time, hàm thành viên Time() có cùng tên với tên lớp Time, nó được gọi là hàm xây dựng (constructor function) của lớp Time. Một constructor là một hàm thành viên đặc biệt mà khởi động các thành viên dữ liệu của một đối tượng của lớp. Một constructor của lớp được gọi tự động khi đối tượng của lớp đó được tạo.  Thông thường, các thành viên dữ liệu được liệt kê trong phần private của một lớp, còn các hàm thành viên được liệt kê trong phần public. Nhưng có thể có các hàm thành viên private và thành viên dữ liệu public. Khi lớp được định nghĩa, nó có thể sử dụng như một kiểu trong phần khai báo như sau: Time Sunset, // Đối tượng của lớp Time ArrayTimes[5], // Mảng các đối tượng của lớp Time *PTime, // Con trỏ trỏ đến một đối tượng của lớp Time &DinnerTime = Sunset; // Tham chiếu đến một đối tượng của lớp Time
#include<iostream>
using namespace std;
class time
{
public:
time();
void settime(int ,int ,int);
void inkieu1();
void inkieu2();
private:
int hour;
int minute;
int second;
};
time::time()
{
hour=minute=second=0;
}
void time::settime(int h,int m,int s)
{
hour=(h>=0 && h<24)?h:0;
minute=(m>=0 && m<59)? m:0;
second=(s>=0 && s<59)?s:0;
}
void time::inkieu1()
{
cout<<(hour<10?"0":"")<<hour<<":"<<(minute<10?"0":"")<<minute<<":"<<(second<10?"0":"")<<second;
}
void time::inkieu2()
{
cout<<((hour==0 || hour==12)?12:hour%12)<<":"<<(minute<10?"0":"")<<minute<<":"<<(second<10?"0":"")<<second<<(hour<12?" AM":" PM");
}
void main()
{
time t;
int h,m,s;
cout<<"nhap hour,minute,second:\n";
cin>>h>>m>>s;
cout<<"gio mac dinh: \n";
cout<<"kieu 1: ";t.inkieu1();
cout<<"\nkieu 2: ";t.inkieu2();
cout<<"\n\ngio da thiet lap:\n";
t.settime(h,m,s);
cout<<"kieu 1: ";t.inkieu1();
cout<<"\nkieu 2: ";t.inkieu2();
cout<<"\n\nnhap vao gio sai:\n";cin>>h>>m>>s;
t.settime(h,m,s);
cout<<"kieu 1: ";t.inkieu1();
cout<<"\nkieu 2: ";t.inkieu2();
}

Related Posts:

  • [oop c++] hàm thiết lập constructor, hủy bỏ destructor Trong hầu hết các thuật giải, để giải quyết một vấn đề thường phải thực hiện các công việc: Khởi tạo giá trị cho biến, cấp phát vùng bộ nhớ của biến con trỏ, mở tập tin để truy cập,… Hoặc khi kết thúc, chúng ta phải thực hiệ… Read More
  • [oop c++] con trỏ this và phép gán đối tượng Con trỏ this Từ khoá this trong định nghĩa của các hàm thành phần lớp dùng để xác định địa chỉ của đối tượng dùng làm tham số ngầm định cho hàm thành phần. Con trỏ this tham chiếu đến đối tượng đang gọi hàm thành phần. Ví d… Read More
  • thao tác file với thư viện fstream Để sử dụng được thư viện fstream, ta phải include thư viện fstream và using namespace std; #include <fstream> using namespace std; Điều đầu tiên, ta tạo ra một đối tượng fstream. Ta sẽ thao tác với file thông qua … Read More
  • PHẠM VI LỚP VÀ TRUY CẬP CÁC THÀNH VIÊN LỚP C++PHẠM VI LỚP VÀ TRUY CẬP CÁC THÀNH VIÊN LỚP C++ Các thành viên dữ liệu của một lớp (các biến khai báo trong định nghĩa lớp) và các hàm thành viên (các hàm khai báo trong định nghĩa lớp) thuộc vào phạm vi của lớp.  Trong … Read More
  • [OOP C++] Phạm Vi Truy Xuất Thành Phần Đối TượngTrong định nghĩa của lớp ta có thể xác định khả năng truy xuất thành phần của một lớp nào đó từ bên ngoài phạm vi lớp. private, protected và public là các từ khoá xác định phạm vi truy xuất Mọi thành phần được liệt kê trong p… Read More