SlideShare uma empresa Scribd logo
1 de 43
NIIT.vn
CHƯƠNG III
L Ớ P VÀ ĐỐ I T ƯỢ NG




                        NIIT.vn 2
1. Xây dựng lớp và đối tượng

a. Khai báo

   class <tên_lớp>
   {
        [quyền truy xuất:]
        //khai báo các thành phần dữ liệu của lớp
        [quyền truy xuất:]
        //khai báo các thành phần hàm của lớp
   };
                                            NIIT.vn   3/20
a. Khai báo

Trong đó:

   <tên_lớp>:

    do người dùng đặt

    tuân theo các qui tắc về tên

  Ví dụ: Student, NGUOI, HoaDon, ps, MaTran…
                                        NIIT.vn   4/20
a. Khai báo

[quyền truy xuất:]
   Là khả năng truy xuất thành phần dữ liệu
   Ngầm định là private

  private (dành riêng) : trong phạm vi lớp đó

  public (dùng chung) : ở mọi nơi nếu đối tượng tồn tại

  protected (bảo vệ) : phạm vi lớp đó và các lớp con kế
                   thừa
                                                 NIIT.vn   5/20
a. Khai báo

Thành phần của lớp

   Có thể gồm:

    Dữ liệu

    Thuộc tính truy xuất

    Phương thức


                           NIIT.vn   6/20
a. Khai báo

Khai báo thành phần

   Dữ liệu:

  Tương tự như khai báo biến

  <kiểu dữ liệu > <tên_thành_phần>;


  Chú ý: không được khởi tạo giá trị ban đầu
                                               NIIT.vn   7/20
a. Khai báo
Khai báo thành phần
  Hàm thành phần
   • Cách 1: Khai báo nguyên mẫu trong lớp và định
   nghĩa ngoài lớp

   <kiểu trả về > tênlớp::<tên_hàm>([đối số])
   {
   // <thân hàm>
   }
  • Cách 2: định nghĩa ngay trong lớp
                                                NIIT.vn   8/20
a. Khai báo

Ví dụ 1:

   Xây dựng cấu trúc dữ liệu mô tả sinh viên:


   Dữ liệu: họ tên, năm sinh, giới tính, Điểm toán,
   lý, hóa
   Phương thức: nhập, tính đtb, in

   Lớp sinh viên
                                                NIIT.vn   9/20
a. Khai báo

Ví dụ 2:

   Xây dựng cấu trúc dữ liệu mô tả các phân số:

   Dữ liệu: tử số, mẫu số


  Phương thức: nhập, tối giản, in

   Lớp các phân số
                                            NIIT.vn 10/20
a. Khai báo

Ví dụ 3:

   Xây dựng cấu trúc dữ liệu mô tả các hóa đơn:

   Dữ liệu: mã vật tư, tên vật tư, loại phiếu, ngày
   lập, khối lượng, đơn giá, thành tiền…

  Phương thức: nhập, tính thành tiền, in

   Lớp các hóa đơn
                                               NIIT.vn 11/20
b. Khai báo đối tượng

Cú pháp:

            <tên_lớp> <tên_đối_tượng>;


Ví dụ: khai báo 2 đối tượng sinh viên

Student sv1, sv2;

Khi đó sv1, sv2 là hai đối tượng sinh viên
                                             NIIT.vn 12/20
c. Truy xuất thành phần

Dữ liệu

          <tên_đối_tượng>.<tên_tp_dữ liệu>;


Ví dụ: truy xuất họ tên và năm sinh của sv
       Sv1.Hten;
       Sv2.Ns;

Nếu là con trỏ: <tên_con_trỏ>-><tên_tp_dữ liệu>;
                                              NIIT.vn 13/20
c. Truy xuất thành phần

Thành phần hàm

     <tên_đối_tượng>.<tên_hàm>([ds đối số]);


Ví dụ: truy xuất phương thức nhập và in của sv
      sv1.nhap();
      sv2.in();

Với con trỏ: <tên_con_trỏ>-><tên_hàm>([đối số]);
                                            NIIT.vn 14/20
Ví Dụ 1: Nhập thông tin của một sinh viên và xuất ra thông tin đã nhập

#include <iostream.h>
class Student
{
        private:
                 char Hten[30], Gtinh[5];
                 int Ns;
                 float Dtoan,Dly,Dhoa;
        public:
                 void nhap()
                 {
                           cout << “Nhap vao Ho ten sinh vien: “;
                           cin >> Hten ;
                           cout << “Nhap vao nam sinh: “;
                           cin >> Ns ;
                           cout << “Nhap vao gioi tinh: “;
                           cin >> Gtinh ;
                           cout << “Nhap vao diem toan: “;
                           cin >> Dtoan ;
                           cout << “Nhap vao diem ly: “;
                           cin >> Dly ;
                           cout << “Nhap vao diem hoa: “;
                           cin >> Dhoa ;

                 } //ket thuc ham nhap
                                                                    NIIT.vn 15/20
float diemtb()
                   {
                              return ((Dtoan+Dly+Dhoa)/3);

                    } // ket thuc ham diemtb
        void in()
                    {
                              cout<< Hten<<‘t’<<Ns<<‘t’<<Gtinh<<endl;
                              cout<<”Diem toan:”<< Dtoan<<endl;
                              cout<<”Diem ly:”<< Dly<<endl;
                              cout<<”Diem hoa:”<< Dhoa<<endl;
                              cout<<”Diem trung binh:”<<diemtb()<<endl;

                    } // ket thuc ham in

};// ket thuc lop Student

void main()
{
       Student SV;
       SV.nhap();
       SV.in();

}// ket thuc ham main

                                                                          NIIT.vn 16/20
Ví dụ 2: Nhập ngày tháng năm. Kiểm tra tính hợp lệ và in ra ngày tháng năm đã
nhập.

#include <iostream.h>
#include <conio.h>
#define FALSE 0
#define TRUE !FALSE
static char* Thang[]={"","gieng”,"hai”,"ba”,"bon”,"nam”,"sau”,"bay”,
                         "tam“,"chin”,"muoi","muoi mot","chap"};
static char* Thu[]={"","Chu nhat”,"hai”,"ba“,"tu","nam”,"sau”,"bay"};
static NgayThang[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

 class CDate
 {
         private:
                     int mNgay,mThang,mNam;
                     int laNamNhuan(int);
           public:
                     void nhap();
                     int hopLe();
                     void in();
 };
                                                                        NIIT.vn   17
void CDate::nhap()
 {
         cout<<endl<<"Ngay: ";
         cin>>mNgay;
         cout<<endl<<"Thang: ";
         cin>>mThang;
         cout<<endl<<"Nam: ";
         cin>>mNam;
 }

int CDate::hopLe()
{
         if ((mThang<1)||(mThang>12)) return FALSE;
         else
         {
               if ((mNgay>=1)&&(mNgay<=NgayThang[mThang])) return TRUE;
               else if ((mNgay==29)&&laNamNhuan(mNgay))    return TRUE;
                     else return FALSE;
         }
}


                                                              NIIT.vn     18
int CDate::laNamNhuan(int nam)
{
   if (((nam%400)==0)||(((nam%4)==0)&&((nam%100)!=0))) return TRUE;
   else return FALSE;
}

  void CDate::in()
  {
          cout<<endl<<“Ngay da nhap "<<mNgay;
          cout<<" thang "<<Thang[mThang];
          cout<<" nam "<<mNam;
  }
  int main()
  {
            CDate ngay;
            ngay.nhap();
            if (ngay.hopLe()) ngay.in();
            else cout<<“NHAP NGAY KHONG HOP LE";
            getch();
            return 0;
  }
                                                                      NIIT.vn   19
Ví dụ 3: Nhập một chuỗi ký tự. Xuất ra chuỗi đã nhập.

#include <iostream.h>
#include <string.h>
class CString
{ public:
         int ChieuDai();
         void Xuat();
         int Nhap(char* s);

     private:
             int mLength;
             char* mPtr;
};
int CString::Nhap(char *s)
{         mLength = strlen(s);
          mPtr = new char[mLength + 1];
          if (mPtr == NULL) return 0;
          strcpy(mPtr,s);
          return 1;
}
void CString::Xuat()
{         cout << mPtr;                                 NIIT.vn   20
}
int CString::ChieuDai()
{
          return mLength;
}


int main()
{
          char s[30];
          CString str;
          cout << endl << "Nhap vao 1 chuoi: ";
          cin >> s;
          str.Nhap(s);
          clrscr();
          cout << "Ban da nhap chuoi: ";
          str.Xuat();
          cout << endl << "Chuoi co chieu dai: " << str.ChieuDai() << " ky tu";
          getch();
          return 0;
}


                                                                            NIIT.vn   21
Ví dụ 4: Cộng 2 thời gian va xuất ra màn hình.

#include <iostream.h>

class CTime
{
         public:
                    void addit(CTime aa,CTime bb);
                    void display();
                    void getinfo();
         private:
                    int hours, minutes, seconds;
};
void CTime::getinfo()
{
           cin >> hours >> minutes >> seconds;
} //ket thuc ham getinfo

void CTime::display()
{
           cout<<hours<<':'<<minutes<<':'<<seconds<< endl;
} // ket thuc ham display
                                                             NIIT.vn   22
void CTime::addit(CTime aa, CTime bb)
{
        hours = aa.hours + bb.hours;
        minutes = aa.minutes + bb.minutes;
        seconds = aa.seconds + bb.seconds;
        //kiem tra seconds < 60
        if( seconds >= 60)
        {
                  seconds -= 60; // seconds = seconds - 60
                  minutes++; //minutes = minutes + 1
        }

        //kiem tra minutes < 60
        if (minutes >= 60)
        {
                  minutes -=60;
                  hours++;
        }
}

                                                             NIIT.vn   23
void main()
{
   CTime one, two, three;
   cout << "n Nhap vao thoi gian mot (gio phut giay): ";
   one.getinfo();
   cout << "n Nhap vao thoi gian hai (gio phut giay): ";
   two.getinfo();
   three.addit(one, two);
   cout << "Ket qua la ";
   three.display();
   getch();
}



                                                            NIIT.vn   24
2. Các phương thức

Một đối tượng thường có 4 kiểu hành vi cơ bản:

     Các phương thức khởi tạo: Constructor

     Các phương thức truy vấn: Queries

     Các phương thức cập nhập: Updates

     Các phương thức hủy: Destructor


                                              NIIT.vn   25
a. Hàm khởi tạo

Khai báo:

              <tên_lớp>([ds tham số]);
Định nghĩa ngoài lớp:
 <tên_lớp>::<tên_lớp>([ds tham số])
 {
 //thân hàm
 }
                                         NIIT.vn   26
a. Hàm khởi tạo (tiếp)

Như vậy hàm khởi tạo:
   Có với mọi lớp
  Tên hàm giống tên lớp
   Không có kiểu nên không cần khai báo
   Không có giá trị trả về
   Nếu không xây dựng thì chương trình tự động
   sinh hàm khởi tạo mặc định
   Được gọi tự động khi khai báo thể hiện của lớp
                                           NIIT.vn   27
a. Hàm khởi tạo (tiếp)

Một số hàm khởi tạo:
   - Hàm khởi tạo mặc định: default constructor
   - Hàm khởi tạo sao chép: copy constructor
   Khai báo:
   <tên_lớp>(const <tên_lớp> &<tên_tham_số>)

   Đối tượng mới sẽ là bản sao của đối tượng đã có


                                               NIIT.vn   28
Ví dụ:
class CDate
{
        private:
                   int mNgay,mThang,mNam;
                   int hopLe(int,int,int);

        public:
                   CDate();// hàm khởi tạo mặc định
                   CDate(int,int,int);//hàm khởi tạo có đối số

                   int ganNgay(int);
                   int ganThang(int);
                   int ganNam(int);

                   void doc() const;
                   int docNgay() const;
                   int docThang() const;
                   int docNam() const;

                   int laNamNhuan() const;
                   CDate cong(int soNgay = 1);
                   CDate tru(int soNgay = 1);                    NIIT.vn   29
};
CDate::CDate()
{       struct date d;
        getdate(&d);
        mNgay = d.da_day;
        mThang = d.da_mon;
        mNam = d.da_year;
}

CDate::CDate(int ngay,int thang,int nam)
{       if (hopLe(ngay,thang,nam))
        {
                 mNgay = ngay;
                 mThang = thang;
                 mNam = nam;
        }
        else
        {
                 CDate date;
                 mNgay = date.mNgay;
                 mThang = date.mThang;
                 mNam = date.mNam;
        }
}
                                           NIIT.vn   30
b. Hàm hủy - Destructor

Khai báo:

                   ~<tên_lớp>();
Chức năng:
 - Hủy bỏ, giải phóng các đối tượng khi nó hết phạm vi
 tồn tại




                                             NIIT.vn   31
b. Hàm hủy (tiếp)

Như vậy hàm hủy:
   Không có đối số
  Không có giá trị trả về
   Không định nghĩa lại
   Trùng tên với lớp và có dấu ~ ở trước
   Thực hiện một số công việc trước khi hệ thống
   giải phóng bộ nhớ
   Chương trình dịch tự động sinh hàm hủy mặc
   định                                   NIIT.vn   32
3. Toán tử đa năng

Cú pháp:

    <kiểu trả về>operator<tên toán tử>([ds tham số])
Định nghĩa ngoài lớp:
<kiểu trả về><tên_lớp>::operator<tên toán tử>([ds
tham số])
{
//thân hàm
}                                              NIIT.vn   33
3. Toán tử đa năng (tiếp)
Ví dụ:
    Toán tử đa năng +, * của lớp phân số
    Toán tử đa năng+ vector
Chú ý:
    Chỉ có thể định nghĩa lại các toán tử ở trên
    Không làm thay đổi độ ưu tiên của các toán tử
    Với toán tử 2 ngôi: toán tử bên trái là ẩn toán
    tử bên phải là đối số
  Do đó: số tham số bằng số toán hạng - 1
                                               NIIT.vn   34
3. Toán tử đa năng (tiếp)

Cách gọi hàm toán tử:
 Dùng như cú pháp thông thường của phép toán
   Ví dụ: PS a,b,c; c=a+b;
 Dùng như hàm thành phần của đối tượng

   Ví dụ:
        PS a,b,c;
        c=a.operator+(b);

                                          NIIT.vn   35
Bài tập

1. Xây dựng lớp phân số gồm các thành phần:
  -DL: tử số, mẫu số
  -Pt: nhập, in, tối giản, so sánh 2 ps
  Hàm main:
          -Nhập mảng có n phân số (n<=10)
          -Sắp xếp mảng PS theo thứ tự giảm dần
          -In mảng sau khi xếp



                                         NIIT.vn   36
Bài tập

2. Xây dựng lớp số phức gồm các thành phần:
   -DL: phần thực, phần ảo
   -Pt: nhập, in, tính pt 2 + pa2 , nhân, chia 2 số phức
   Hàm main:
            -Nhập 2 số phức
            -Tính và in tổng, hiệu hai số phức
            -In mảng sau khi xếp




                                                     NIIT.vn   37
Bài tập

3. Xây dựng lớp vectơ gồm các thành phần:
   -DL: số phần tử, mảng các phần tử
   -Pt: nhập, in, tổng 2 vectơ, tích vô hướng
Hàm main:
         -Nhập 2 vectơ
         -Tính và in tổng a+b



                                                NIIT.vn   38
Bài tập

4. Xây dựng lớp ma trận gồm các thành phần:
  -DL: số dòng, số cột, mảng các phần tử
  -Pt: nhập, in, kiểm tra ma trận có là đơn vị không
Hàm main:
    -Nhập ma trận a
    -Thông báo có là ma trận đơn vị không
    -In ma trận



                                             NIIT.vn   39
Bài tập

5. Xây dựng lớp sinh viên gồm các thành phần:
   -DL: họ tên, ngày sinh, giới tính, lớp ,điểm toán, lý, hóa,
    đtb
   -Pt: nhập, in, tính điểm trung bình
Hàm main:
     -Nhập danh sách sinh viên
     -Sắp xếp theo điểm trung bình giảm dần
     -In danh sách sau khi sắp xếp



                                                       NIIT.vn   40
Bài tập

6. Xây dựng lớp hóa đơn gồm các thành phần:
   -DL: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng,
     đơn giá, thành tiền
   -Pt: nhập, in, kiểm tra phiếu nhập hay xuất
Hàm main:
    -Nhập danh sách hóa đơn
    -Tính thành tiền cho các hóa đơn và in tổng thành tiền
    -In danh sách sau khi xếp theo số tiền giảm dần



                                                      NIIT.vn   41
Bạn đã biết cần phải làm gì?




                               NIIT.vn
Mọi thắc mắc sẽ được giải đáp trong khóa học
LậP TRÌNH WEB VớI JAVA/JSP/SERVLET tại
Học viện NIIT INET




       Liên hệ: 0904 840 550 (Ms Mai)
       Email: maintn@inet.vn            NIIT.vn

Mais conteúdo relacionado

Mais procurados

Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Nguyễn Trọng
 
Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)lieu_lamlam
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHai Rom
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
Ngân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhNgân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhCao Toa
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logickikihoho
 
Chương 3: Hồi quy bội
Chương 3: Hồi quy bộiChương 3: Hồi quy bội
Chương 3: Hồi quy bộiRussia Dương
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql. .
 
Các cấu trúc lệnh trong C
Các cấu trúc lệnh trong CCác cấu trúc lệnh trong C
Các cấu trúc lệnh trong Cpnanhvn
 
chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boolekikihoho
 
12.ma trận và dịnh thức
12.ma trận và dịnh thức12.ma trận và dịnh thức
12.ma trận và dịnh thứcTrinh Yen
 
Bai 02 thong ke mo ta
Bai 02 thong ke mo taBai 02 thong ke mo ta
Bai 02 thong ke mo tatqphi
 
9 dạng bài tập định khoản kế toán
9 dạng bài tập định khoản kế toán9 dạng bài tập định khoản kế toán
9 dạng bài tập định khoản kế toánLớp kế toán trưởng
 
Hệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị miniHệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị miniHan Nguyen
 
Chuong 2 tổ chức dữ liệu trong HTTT kế toán
Chuong 2 tổ chức dữ liệu trong HTTT kế toánChuong 2 tổ chức dữ liệu trong HTTT kế toán
Chuong 2 tổ chức dữ liệu trong HTTT kế toándlmonline24h
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtHưởng Nguyễn
 
Bảng giá trị hàm Laplace
Bảng giá trị hàm LaplaceBảng giá trị hàm Laplace
Bảng giá trị hàm Laplacehiendoanht
 

Mais procurados (20)

Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1
 
Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)
 
bai tap co loi giai xac suat thong ke
bai tap co loi giai xac suat thong kebai tap co loi giai xac suat thong ke
bai tap co loi giai xac suat thong ke
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanh
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
 
Ngân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhNgân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tính
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logic
 
Chương 3: Hồi quy bội
Chương 3: Hồi quy bộiChương 3: Hồi quy bội
Chương 3: Hồi quy bội
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 
Các cấu trúc lệnh trong C
Các cấu trúc lệnh trong CCác cấu trúc lệnh trong C
Các cấu trúc lệnh trong C
 
chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boole
 
12.ma trận và dịnh thức
12.ma trận và dịnh thức12.ma trận và dịnh thức
12.ma trận và dịnh thức
 
Cơ sở dữ liệu nâng cao
Cơ sở dữ liệu nâng caoCơ sở dữ liệu nâng cao
Cơ sở dữ liệu nâng cao
 
Bai 02 thong ke mo ta
Bai 02 thong ke mo taBai 02 thong ke mo ta
Bai 02 thong ke mo ta
 
9 dạng bài tập định khoản kế toán
9 dạng bài tập định khoản kế toán9 dạng bài tập định khoản kế toán
9 dạng bài tập định khoản kế toán
 
Hệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị miniHệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị mini
 
Chuong 2 tổ chức dữ liệu trong HTTT kế toán
Chuong 2 tổ chức dữ liệu trong HTTT kế toánChuong 2 tổ chức dữ liệu trong HTTT kế toán
Chuong 2 tổ chức dữ liệu trong HTTT kế toán
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
 
Bảng giá trị hàm Laplace
Bảng giá trị hàm LaplaceBảng giá trị hàm Laplace
Bảng giá trị hàm Laplace
 
Chương 5
Chương 5Chương 5
Chương 5
 

Destaque (9)

Những kỹ năng cần có để trở thành nhà quản lý dự án chuyên nghiệp
Những kỹ năng cần có để trở thành nhà quản lý dự án chuyên nghiệpNhững kỹ năng cần có để trở thành nhà quản lý dự án chuyên nghiệp
Những kỹ năng cần có để trở thành nhà quản lý dự án chuyên nghiệp
 
Lập trình hướng đối tượng - p2
Lập trình hướng đối tượng - p2Lập trình hướng đối tượng - p2
Lập trình hướng đối tượng - p2
 
Tại sao nên chọn ngôn ngữ php
Tại sao nên chọn ngôn ngữ phpTại sao nên chọn ngôn ngữ php
Tại sao nên chọn ngôn ngữ php
 
Những con số thú vị về hệ điều hành android
Những con số thú vị về hệ điều hành androidNhững con số thú vị về hệ điều hành android
Những con số thú vị về hệ điều hành android
 
CV-NGUYEN HONG HAI
CV-NGUYEN HONG HAICV-NGUYEN HONG HAI
CV-NGUYEN HONG HAI
 
Lap trinh huong doi tuong
Lap trinh huong doi tuongLap trinh huong doi tuong
Lap trinh huong doi tuong
 
Lap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hocLap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hoc
 
Lập trình hướng đối tượng tailieumienphi.edu.vn
Lập trình hướng đối tượng tailieumienphi.edu.vnLập trình hướng đối tượng tailieumienphi.edu.vn
Lập trình hướng đối tượng tailieumienphi.edu.vn
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 

Semelhante a Lập trình hướng đối tượng - p3

Semelhante a Lập trình hướng đối tượng - p3 (20)

Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson07
Lap trinh huong_doi_tuong_cpp_dhct_lesson07Lap trinh huong_doi_tuong_cpp_dhct_lesson07
Lap trinh huong_doi_tuong_cpp_dhct_lesson07
 
Chuong5 (2)
Chuong5 (2)Chuong5 (2)
Chuong5 (2)
 
Lesson07
Lesson07Lesson07
Lesson07
 
giao trinh c++ Chuong1
giao trinh c++ Chuong1giao trinh c++ Chuong1
giao trinh c++ Chuong1
 
Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
Lesson08
Lesson08Lesson08
Lesson08
 
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
 
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
 
Lập trình c++ có lời giải 2
Lập trình c++ có lời giải 2Lập trình c++ có lời giải 2
Lập trình c++ có lời giải 2
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 
Chuong1 c
Chuong1 c Chuong1 c
Chuong1 c
 
Bai de quy
Bai de quyBai de quy
Bai de quy
 
Lesson08
Lesson08Lesson08
Lesson08
 
Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1
 
Advcpp good
Advcpp goodAdvcpp good
Advcpp good
 
Nang cao c++
Nang cao c++Nang cao c++
Nang cao c++
 
Bai tap oop c++
Bai tap oop c++Bai tap oop c++
Bai tap oop c++
 
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
 

Lập trình hướng đối tượng - p3

  • 2. CHƯƠNG III L Ớ P VÀ ĐỐ I T ƯỢ NG NIIT.vn 2
  • 3. 1. Xây dựng lớp và đối tượng a. Khai báo class <tên_lớp> { [quyền truy xuất:] //khai báo các thành phần dữ liệu của lớp [quyền truy xuất:] //khai báo các thành phần hàm của lớp }; NIIT.vn 3/20
  • 4. a. Khai báo Trong đó: <tên_lớp>:  do người dùng đặt  tuân theo các qui tắc về tên Ví dụ: Student, NGUOI, HoaDon, ps, MaTran… NIIT.vn 4/20
  • 5. a. Khai báo [quyền truy xuất:]  Là khả năng truy xuất thành phần dữ liệu  Ngầm định là private private (dành riêng) : trong phạm vi lớp đó public (dùng chung) : ở mọi nơi nếu đối tượng tồn tại protected (bảo vệ) : phạm vi lớp đó và các lớp con kế thừa NIIT.vn 5/20
  • 6. a. Khai báo Thành phần của lớp  Có thể gồm: Dữ liệu Thuộc tính truy xuất Phương thức NIIT.vn 6/20
  • 7. a. Khai báo Khai báo thành phần  Dữ liệu: Tương tự như khai báo biến <kiểu dữ liệu > <tên_thành_phần>; Chú ý: không được khởi tạo giá trị ban đầu NIIT.vn 7/20
  • 8. a. Khai báo Khai báo thành phần  Hàm thành phần • Cách 1: Khai báo nguyên mẫu trong lớp và định nghĩa ngoài lớp <kiểu trả về > tênlớp::<tên_hàm>([đối số]) { // <thân hàm> } • Cách 2: định nghĩa ngay trong lớp NIIT.vn 8/20
  • 9. a. Khai báo Ví dụ 1: Xây dựng cấu trúc dữ liệu mô tả sinh viên: Dữ liệu: họ tên, năm sinh, giới tính, Điểm toán, lý, hóa Phương thức: nhập, tính đtb, in  Lớp sinh viên NIIT.vn 9/20
  • 10. a. Khai báo Ví dụ 2: Xây dựng cấu trúc dữ liệu mô tả các phân số: Dữ liệu: tử số, mẫu số Phương thức: nhập, tối giản, in  Lớp các phân số NIIT.vn 10/20
  • 11. a. Khai báo Ví dụ 3: Xây dựng cấu trúc dữ liệu mô tả các hóa đơn: Dữ liệu: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng, đơn giá, thành tiền… Phương thức: nhập, tính thành tiền, in  Lớp các hóa đơn NIIT.vn 11/20
  • 12. b. Khai báo đối tượng Cú pháp: <tên_lớp> <tên_đối_tượng>; Ví dụ: khai báo 2 đối tượng sinh viên Student sv1, sv2; Khi đó sv1, sv2 là hai đối tượng sinh viên NIIT.vn 12/20
  • 13. c. Truy xuất thành phần Dữ liệu <tên_đối_tượng>.<tên_tp_dữ liệu>; Ví dụ: truy xuất họ tên và năm sinh của sv Sv1.Hten; Sv2.Ns; Nếu là con trỏ: <tên_con_trỏ>-><tên_tp_dữ liệu>; NIIT.vn 13/20
  • 14. c. Truy xuất thành phần Thành phần hàm <tên_đối_tượng>.<tên_hàm>([ds đối số]); Ví dụ: truy xuất phương thức nhập và in của sv sv1.nhap(); sv2.in(); Với con trỏ: <tên_con_trỏ>-><tên_hàm>([đối số]); NIIT.vn 14/20
  • 15. Ví Dụ 1: Nhập thông tin của một sinh viên và xuất ra thông tin đã nhập #include <iostream.h> class Student { private: char Hten[30], Gtinh[5]; int Ns; float Dtoan,Dly,Dhoa; public: void nhap() { cout << “Nhap vao Ho ten sinh vien: “; cin >> Hten ; cout << “Nhap vao nam sinh: “; cin >> Ns ; cout << “Nhap vao gioi tinh: “; cin >> Gtinh ; cout << “Nhap vao diem toan: “; cin >> Dtoan ; cout << “Nhap vao diem ly: “; cin >> Dly ; cout << “Nhap vao diem hoa: “; cin >> Dhoa ; } //ket thuc ham nhap NIIT.vn 15/20
  • 16. float diemtb() { return ((Dtoan+Dly+Dhoa)/3); } // ket thuc ham diemtb void in() { cout<< Hten<<‘t’<<Ns<<‘t’<<Gtinh<<endl; cout<<”Diem toan:”<< Dtoan<<endl; cout<<”Diem ly:”<< Dly<<endl; cout<<”Diem hoa:”<< Dhoa<<endl; cout<<”Diem trung binh:”<<diemtb()<<endl; } // ket thuc ham in };// ket thuc lop Student void main() { Student SV; SV.nhap(); SV.in(); }// ket thuc ham main NIIT.vn 16/20
  • 17. Ví dụ 2: Nhập ngày tháng năm. Kiểm tra tính hợp lệ và in ra ngày tháng năm đã nhập. #include <iostream.h> #include <conio.h> #define FALSE 0 #define TRUE !FALSE static char* Thang[]={"","gieng”,"hai”,"ba”,"bon”,"nam”,"sau”,"bay”, "tam“,"chin”,"muoi","muoi mot","chap"}; static char* Thu[]={"","Chu nhat”,"hai”,"ba“,"tu","nam”,"sau”,"bay"}; static NgayThang[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; class CDate { private: int mNgay,mThang,mNam; int laNamNhuan(int); public: void nhap(); int hopLe(); void in(); }; NIIT.vn 17
  • 18. void CDate::nhap() { cout<<endl<<"Ngay: "; cin>>mNgay; cout<<endl<<"Thang: "; cin>>mThang; cout<<endl<<"Nam: "; cin>>mNam; } int CDate::hopLe() { if ((mThang<1)||(mThang>12)) return FALSE; else { if ((mNgay>=1)&&(mNgay<=NgayThang[mThang])) return TRUE; else if ((mNgay==29)&&laNamNhuan(mNgay)) return TRUE; else return FALSE; } } NIIT.vn 18
  • 19. int CDate::laNamNhuan(int nam) { if (((nam%400)==0)||(((nam%4)==0)&&((nam%100)!=0))) return TRUE; else return FALSE; } void CDate::in() { cout<<endl<<“Ngay da nhap "<<mNgay; cout<<" thang "<<Thang[mThang]; cout<<" nam "<<mNam; } int main() { CDate ngay; ngay.nhap(); if (ngay.hopLe()) ngay.in(); else cout<<“NHAP NGAY KHONG HOP LE"; getch(); return 0; } NIIT.vn 19
  • 20. Ví dụ 3: Nhập một chuỗi ký tự. Xuất ra chuỗi đã nhập. #include <iostream.h> #include <string.h> class CString { public: int ChieuDai(); void Xuat(); int Nhap(char* s); private: int mLength; char* mPtr; }; int CString::Nhap(char *s) { mLength = strlen(s); mPtr = new char[mLength + 1]; if (mPtr == NULL) return 0; strcpy(mPtr,s); return 1; } void CString::Xuat() { cout << mPtr; NIIT.vn 20 }
  • 21. int CString::ChieuDai() { return mLength; } int main() { char s[30]; CString str; cout << endl << "Nhap vao 1 chuoi: "; cin >> s; str.Nhap(s); clrscr(); cout << "Ban da nhap chuoi: "; str.Xuat(); cout << endl << "Chuoi co chieu dai: " << str.ChieuDai() << " ky tu"; getch(); return 0; } NIIT.vn 21
  • 22. Ví dụ 4: Cộng 2 thời gian va xuất ra màn hình. #include <iostream.h> class CTime { public: void addit(CTime aa,CTime bb); void display(); void getinfo(); private: int hours, minutes, seconds; }; void CTime::getinfo() { cin >> hours >> minutes >> seconds; } //ket thuc ham getinfo void CTime::display() { cout<<hours<<':'<<minutes<<':'<<seconds<< endl; } // ket thuc ham display NIIT.vn 22
  • 23. void CTime::addit(CTime aa, CTime bb) { hours = aa.hours + bb.hours; minutes = aa.minutes + bb.minutes; seconds = aa.seconds + bb.seconds; //kiem tra seconds < 60 if( seconds >= 60) { seconds -= 60; // seconds = seconds - 60 minutes++; //minutes = minutes + 1 } //kiem tra minutes < 60 if (minutes >= 60) { minutes -=60; hours++; } } NIIT.vn 23
  • 24. void main() { CTime one, two, three; cout << "n Nhap vao thoi gian mot (gio phut giay): "; one.getinfo(); cout << "n Nhap vao thoi gian hai (gio phut giay): "; two.getinfo(); three.addit(one, two); cout << "Ket qua la "; three.display(); getch(); } NIIT.vn 24
  • 25. 2. Các phương thức Một đối tượng thường có 4 kiểu hành vi cơ bản:  Các phương thức khởi tạo: Constructor  Các phương thức truy vấn: Queries  Các phương thức cập nhập: Updates  Các phương thức hủy: Destructor NIIT.vn 25
  • 26. a. Hàm khởi tạo Khai báo: <tên_lớp>([ds tham số]); Định nghĩa ngoài lớp: <tên_lớp>::<tên_lớp>([ds tham số]) { //thân hàm } NIIT.vn 26
  • 27. a. Hàm khởi tạo (tiếp) Như vậy hàm khởi tạo: Có với mọi lớp Tên hàm giống tên lớp Không có kiểu nên không cần khai báo Không có giá trị trả về Nếu không xây dựng thì chương trình tự động sinh hàm khởi tạo mặc định Được gọi tự động khi khai báo thể hiện của lớp NIIT.vn 27
  • 28. a. Hàm khởi tạo (tiếp) Một số hàm khởi tạo: - Hàm khởi tạo mặc định: default constructor - Hàm khởi tạo sao chép: copy constructor Khai báo: <tên_lớp>(const <tên_lớp> &<tên_tham_số>) Đối tượng mới sẽ là bản sao của đối tượng đã có NIIT.vn 28
  • 29. Ví dụ: class CDate { private: int mNgay,mThang,mNam; int hopLe(int,int,int); public: CDate();// hàm khởi tạo mặc định CDate(int,int,int);//hàm khởi tạo có đối số int ganNgay(int); int ganThang(int); int ganNam(int); void doc() const; int docNgay() const; int docThang() const; int docNam() const; int laNamNhuan() const; CDate cong(int soNgay = 1); CDate tru(int soNgay = 1); NIIT.vn 29 };
  • 30. CDate::CDate() { struct date d; getdate(&d); mNgay = d.da_day; mThang = d.da_mon; mNam = d.da_year; } CDate::CDate(int ngay,int thang,int nam) { if (hopLe(ngay,thang,nam)) { mNgay = ngay; mThang = thang; mNam = nam; } else { CDate date; mNgay = date.mNgay; mThang = date.mThang; mNam = date.mNam; } } NIIT.vn 30
  • 31. b. Hàm hủy - Destructor Khai báo: ~<tên_lớp>(); Chức năng: - Hủy bỏ, giải phóng các đối tượng khi nó hết phạm vi tồn tại NIIT.vn 31
  • 32. b. Hàm hủy (tiếp) Như vậy hàm hủy: Không có đối số Không có giá trị trả về Không định nghĩa lại Trùng tên với lớp và có dấu ~ ở trước Thực hiện một số công việc trước khi hệ thống giải phóng bộ nhớ Chương trình dịch tự động sinh hàm hủy mặc định NIIT.vn 32
  • 33. 3. Toán tử đa năng Cú pháp: <kiểu trả về>operator<tên toán tử>([ds tham số]) Định nghĩa ngoài lớp: <kiểu trả về><tên_lớp>::operator<tên toán tử>([ds tham số]) { //thân hàm } NIIT.vn 33
  • 34. 3. Toán tử đa năng (tiếp) Ví dụ: Toán tử đa năng +, * của lớp phân số Toán tử đa năng+ vector Chú ý: Chỉ có thể định nghĩa lại các toán tử ở trên Không làm thay đổi độ ưu tiên của các toán tử Với toán tử 2 ngôi: toán tử bên trái là ẩn toán tử bên phải là đối số Do đó: số tham số bằng số toán hạng - 1 NIIT.vn 34
  • 35. 3. Toán tử đa năng (tiếp) Cách gọi hàm toán tử: Dùng như cú pháp thông thường của phép toán Ví dụ: PS a,b,c; c=a+b; Dùng như hàm thành phần của đối tượng Ví dụ: PS a,b,c; c=a.operator+(b); NIIT.vn 35
  • 36. Bài tập 1. Xây dựng lớp phân số gồm các thành phần: -DL: tử số, mẫu số -Pt: nhập, in, tối giản, so sánh 2 ps Hàm main: -Nhập mảng có n phân số (n<=10) -Sắp xếp mảng PS theo thứ tự giảm dần -In mảng sau khi xếp NIIT.vn 36
  • 37. Bài tập 2. Xây dựng lớp số phức gồm các thành phần: -DL: phần thực, phần ảo -Pt: nhập, in, tính pt 2 + pa2 , nhân, chia 2 số phức Hàm main: -Nhập 2 số phức -Tính và in tổng, hiệu hai số phức -In mảng sau khi xếp NIIT.vn 37
  • 38. Bài tập 3. Xây dựng lớp vectơ gồm các thành phần: -DL: số phần tử, mảng các phần tử -Pt: nhập, in, tổng 2 vectơ, tích vô hướng Hàm main: -Nhập 2 vectơ -Tính và in tổng a+b NIIT.vn 38
  • 39. Bài tập 4. Xây dựng lớp ma trận gồm các thành phần: -DL: số dòng, số cột, mảng các phần tử -Pt: nhập, in, kiểm tra ma trận có là đơn vị không Hàm main: -Nhập ma trận a -Thông báo có là ma trận đơn vị không -In ma trận NIIT.vn 39
  • 40. Bài tập 5. Xây dựng lớp sinh viên gồm các thành phần: -DL: họ tên, ngày sinh, giới tính, lớp ,điểm toán, lý, hóa, đtb -Pt: nhập, in, tính điểm trung bình Hàm main: -Nhập danh sách sinh viên -Sắp xếp theo điểm trung bình giảm dần -In danh sách sau khi sắp xếp NIIT.vn 40
  • 41. Bài tập 6. Xây dựng lớp hóa đơn gồm các thành phần: -DL: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng, đơn giá, thành tiền -Pt: nhập, in, kiểm tra phiếu nhập hay xuất Hàm main: -Nhập danh sách hóa đơn -Tính thành tiền cho các hóa đơn và in tổng thành tiền -In danh sách sau khi xếp theo số tiền giảm dần NIIT.vn 41
  • 42. Bạn đã biết cần phải làm gì? NIIT.vn
  • 43. Mọi thắc mắc sẽ được giải đáp trong khóa học LậP TRÌNH WEB VớI JAVA/JSP/SERVLET tại Học viện NIIT INET Liên hệ: 0904 840 550 (Ms Mai) Email: maintn@inet.vn NIIT.vn