SlideShare una empresa de 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

Más contenido relacionado

La actualidad más candente

Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Tú Cao
 
Chuong 3- CSDL phân tán
Chuong 3- CSDL phân tánChuong 3- CSDL phân tán
Chuong 3- CSDL phân tánduysu
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql. .
 
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạnbáo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạnnataliej4
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựleemindinh
 
Phụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcnttPhụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcnttanhhuycan83
 
Slide Bao Cao Thuc Tap
Slide Bao Cao Thuc TapSlide Bao Cao Thuc Tap
Slide Bao Cao Thuc Tapthanhhauuit
 
Báo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTTBáo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTTVu Tran
 
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...Long Kingnam
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logickikihoho
 
Tong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdhTong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdhHoat Thai Van
 
Ứng dụng chát realtime android
Ứng dụng chát realtime androidỨng dụng chát realtime android
Ứng dụng chát realtime androidNguyen Thieu
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerNguyễn Phúc
 
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư việnThe Nguyen Manh
 
Hệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHan Nguyen
 

La actualidad más candente (20)

Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
 
Chuong 3- CSDL phân tán
Chuong 3- CSDL phân tánChuong 3- CSDL phân tán
Chuong 3- CSDL phân tán
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạnbáo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
 
Đề tài: Xây dựng phần mềm quản lý nhà hàng ăn uống
Đề tài: Xây dựng phần mềm quản lý nhà hàng ăn uốngĐề tài: Xây dựng phần mềm quản lý nhà hàng ăn uống
Đề tài: Xây dựng phần mềm quản lý nhà hàng ăn uống
 
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đĐề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
BTL Lập trình C#
BTL Lập trình C#BTL Lập trình C#
BTL Lập trình C#
 
Đề tài: Chương trình quản lý nhân sự tiền lương tại doanh nghiệp
Đề tài: Chương trình quản lý nhân sự tiền lương tại doanh nghiệpĐề tài: Chương trình quản lý nhân sự tiền lương tại doanh nghiệp
Đề tài: Chương trình quản lý nhân sự tiền lương tại doanh nghiệp
 
Phụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcnttPhụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcntt
 
Slide Bao Cao Thuc Tap
Slide Bao Cao Thuc TapSlide Bao Cao Thuc Tap
Slide Bao Cao Thuc Tap
 
Báo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTTBáo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTT
 
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logic
 
Tong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdhTong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdh
 
Ứng dụng chát realtime android
Ứng dụng chát realtime androidỨng dụng chát realtime android
Ứng dụng chát realtime android
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL Server
 
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
 
Hệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng online
 

Destacado (8)

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
 

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

Similar 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
 
Nang cao c++
Nang cao c++Nang cao c++
Nang cao c++
 
Advcpp good
Advcpp goodAdvcpp good
Advcpp good
 
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