LËp tr×nh h­íng ®èi t­îng víi C++ So¹n bëi bé m n c ng nghÖ phÇn mÒm



tải về 0.54 Mb.
trang1/3
Chuyển đổi dữ liệu26.03.2018
Kích0.54 Mb.
#36670
  1   2   3

LËp tr×nh h­íng ®èi t­îng víi C++

So¹n bëi bé m«n C«ng nghÖ phÇn mÒm





Bµi thùc hµnh:

BÀI THỰC HÀNH SỐ 1

Môc tiªu:

+ Khởi động chương trình Borland C++ (BC).

+ Tạo, biên dịch và thực hiện chương trình C++ .

+ Định nghĩa lớp và khai báo đối tượng.

+ Cách thức truy cập và thao tác trên các hàm thành viên và các biến thành viên của lớp.

BÀI TẬP THỰC HÀNH
1. Khởi động chương trình Borland C++

2. Tạo và biên dịch và thực hiện chương trình C++

3. Định nghĩa lớp và khai báo đối tượng

4. Cách thức truy cập và thao tác trên các hàm thành viên và các biến thành viên của lớp.



1. Khởi động chương trình Borland C++

+ Để khởi động BC , bạn cần tìm và chạy tập tin BC.EXE. Thường thì tập tin này nằm trong thư mục BIN trong thư mục cài đặt.



Ví dụ : Bạn cài đặt Borland C++ trong thu mục C:\BC khi đó để khởi động Borland C++ bạn tìm và chạy tập tin BC.EXE trong thư mục C:\BC\BIN.



Màn hình của chương trình BC

* Ghi chú : Để khởi động nhanh bạn có thể tạo shortcut cho chương trình. Khi đó để khởi động BC bạn chỉ việc Double-Click vào biểu tượng của BC trên màn hình desktop.

2. Tạo và biên dịch và thực hiện chương trình C++

 - Mở một file mới ( Menu File->New).

- Trong cửa sổ soạn thảo bạn gõ vào đoạn chương trình sau:

 #include

#include

void main()

{

cout << "Hello world !";



getch();

}

 - Lưu file vừa soạn thảo vào đĩa .(Menu File->Save hoặc phím nóng F2) .



- Nhấn tổ hợp phím CTRL - F9 để biên dịch và chạy chương trình. Kết quả như hình sau



Màn hình kết quả khi thực thi chương trình

3. Định nghĩa lớp và khai báo đối tượng

    + Phần này sẽ giúp các bạn hiểu được cách định nghĩa một lớp và khai báo một đối tượng của lớp đó.

    + Thực hiện các bước sau:

+ Tạo một file mới.

+ Trong cửa sổ soạn thảo gõ vào đoạn chương trình sau:


#include

#include


class MyFirstClass // Dinh nghai lop

{

public :

int dataMember;

}; // Ket thuc dinh nghia lop


void main()

{

MyFirstClass aObject; // Khai bao mot doi tuong



aObject.dataMember = 50;

cout << "Du lieu cua doi tuong la: " << aObject.dataMember;

getch();

}


+ Lưu thành file FirstClass.CPP

+ Biên dịch và chạy chương trình, kết quả như sau:



                                          Màn hình kết quả

+  Qua chương trình trên ta thấy định nghĩa của một lớp tương tự như định nghĩa của một record chỉ thay từ khoá struct bằng từ khoá class và hoàn toàn tượng tự cho cách khai báo một đối tượng của lớp

4. Cách thức truy cập và thao tác trên các hàm thành viên và các biến thành viên của lớp.

        + Phần này sẽ giúp các bạn hiểu rõ hơn về các thành phần của lớp như hàm thành viên(Member Functions) , biến thành viên (data members) cũng như cách khai báo và truy cập lên các thành phần đó

        + Thực hiện các bước sau:

+ Tạo một file mới.

+ Trong cửa sổ soạnn thảo gõ vào chương trình sau:


   #include

#include


class CPoint // Dinh nghai lop diem

{

private : // Khai bao bien thanh vien, co thuoc tinh private

int x; // hoanh do

int y; // tung do


public : // Khai bao bien thanh vien, co thuoc tinh public

void Init(int cx, int cy); // ham khoi tao vi tri diem

void Display(); // Ham in vi tri cua diem

void Move(int dx, int dy); // Ham di chuyen vi tri
}; // Ket thuc dinh nghia lop
/* Phan mo ta (cai dat) cac ham thanh vien */
void CPoint :: Init(int cx, int cy)

{

x = cx;



y = cy;

}
void CPoint :: Display()

{

cout << "\n x:y = " << x <<":" << y;



}
void CPoint :: Move(int dx, int dy)

{

x += dx; // x = x + dx



y += dy; // y = y + dy

}
// Chuong trinh chinh


void main()

{

clrscr();



CPoint p1; // Khai bao 1 doi tuong cua lop CPoint

CPoint *p; // Khai bao mot con tro doi tuong CPoint


cout << "Toa do cua p1 sau khi goi p1.Init(10,10)";

p1.Init(10,10); // Khoi tao toa do diem

p1.Display(); // Thu hien thi xem sao !

p1.Move(1,1); // Sau di chuyen di mot chut

cout << "\nToa do cua p1 sau khi goi p1.Move(1,1)";

p1.Display(); // Xem da di chuyen chua ?


p = new CPoint; // Xin cap phat mot doi tuong CPoint

p->Init(100,100);

cout << "\nToa do cua con tro p sau khi goi p->Init(100,100) :";

p->Display(); // hay nho, voi con tro phai la ->, khong phai "."

cout << "\nVa sau khi goi p->Move(10,10) ";

p->Move(10,10); // Chay mot doan nua roi hien thi

p->Display(); // Hien thi
cout << endl << endl << "An phim bat ky..." ;
getch();

}


         + Lưu file vào đĩa.

        + Kết quả khi chạy chương trình.



+ Ghi chú : Từ khoá public cho ta biết tầm vực của hàm hay biến được khai báo theo sau nó,ý nghĩa của từ khoá này sẽ được làm rõ trong bài thực hành sau.

Bµi tËp lµm thªm

Bài 1: Viết chương trình tính diện tích của hình chữ nhật và kiểm tra xem hình chữ nhật đó có phải là hình vuông hay không

        Hướng dẫn: Định nghĩa một lớp hinh chữ nhật Rect như sau;



Class CRect // Lop hinh chu nhat

{

private :

int nWidth; // Chieu rong

int nHeight; // Chieu dai



public :

void Input(); // Nhap kich thuoc tu ban phim

void Init(int w, int h); // Khoi tao kich thuoc

long Area(); // Tra ve dien tich

int IsSquare(); // Co la hinh vuong khong.

] ; // Ket thuc phan dinh nghia (Khai bao) lop



+ Hàm Input cho phép người dùng nhập các chiều của hình chữ nhật từ bàn phím.

+ Hàm Init khởi tạo các chiều của hình chữ nhật với các giá tri w và h.

+ Hàm Area trả về diện tích của hình vuông.

          + Hàm IsSquare sẽ trả về 1 nếu hình chữ nhật là hình vuông, nếu không thì trả về 0.



Bài 2: Viết chương trình tạo ra lớp phân số, trong đó có các hàm thành viên cho phép nhập vào phân số, khởi tạo phân số, kiểm tra tính hợp lệ của phân số, rút gọn phân số và in phân số ra màn hình.

Bài 3: Xây dựng lớp "ngày" cho phép nhập vào một ngày, khởi tạo một ngày, kiểm tra ngày hợp lệ, tính ngày tiếp theo, và in ngày ra màn hình.

            Hướng dẫn: Định nghĩa lớp ngày như sau



Class CDate // Lop ngay

{

private :

int nDay; // Ngay

int nMonth; // Thang

int nYear; // Nam
public :

void Input(); // Nhap ngay thang tu ban phim

void Init(int d, int m, int y);// Khoi tao gia tri

int IsValid(); // Kiem tra ngay xem co hop le ?



void NextDay(CDate &objNext); // Tinh ngay tiep theo

void Display();

¦ ; // Ket thuc phan dinh nghia (Khai bao) lop






Bµi thùc hµnh:

BÀI THỰC HÀNH SỐ 2

Môc tiªu:



  • Lớp (class) và đối tượng (object).

  • Các thuộc tính dữ liệu và các hàm thành viên “public” và “private”.

  • Mảng các đối tượng.

BÀI TẬP THỰC HÀNH

2.1 Lớp, đối tượng và các hàm thành viên

2.2 Mảng các đối tượng


    1. Lớp, đối tượng và các hàm thành viên

      1. Thành phần dữ liệu “public” trong lớp

Khi các thuộc tính được khai báo là “public” thì chúng có thể được truy xuất từ bên ngoài. Chương trình sau minh hoạ điều này:

  1. Tạo file mới

  2. Gõ đoạn chương trình sau

#include


class date

{

public:



int day;

int month;

int year;

};
void main()

{

date today;



today.day = 25;

today.month = 12;

today.year = 2001;

cout << “\n Ngay la “<< today.day<< “/” ;

cout << today.month << “/” << today.year << endl;

}


  1. Lưu file với tên “date211.cpp”

  2. Dịch và chạy chương trình

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :

Ngay la 25/12/2001
Trong chương trình trên, lớp date được cài đặt có ba thuộc tính được khai báo là public và các thuộc tính này có thể được truy xuất từ bên ngoài lớp. Ở đây chúng được truy cập từ hàm main(). Để truy xuất các thành phần của lớp, trong C++ sử dụng toán tử dấu chấm “.”;

Từ khoá endl dùng là ký tự xuống dòng hoặc làm cho đầy dòng, nó tương tự như ‘\n’.



  1. Đóng file “date211.cpp”

      1. Thành phần dữ liệu “private” trong lớp

Khi không dùng từ khoá public thì trình biên dịch C++ sẽ xem các thành phần của lớp được khai báo là private. Các thành phần được khai báo là private sẽ không truy cập trực tiếp được từ bên ngoài lớp.



  1. Sửa lại file “date211.cpp”

#include


class date

{ //mac đinh cac thanh phan se đuoc xem la private


int day;

int month;

int year;

};
void main()

{

date today;



today.day = 25;

today.month = 12;

today.year = 2001;

cout << “\n Ngay la “<< today.day<< “/” ;

cout << today.month << “/” << today.year << endl;

}



  1. Lưu file (save as) với tên “date212.cpp”

  2. Dịch chương trình, bạn sẽ thấy các thông báo lỗi sau:

date:: day is not accessible

date:: month is not accessible

date:: year is not accessible

Chương trình trên không thực hiện được vì các thuộc tính dữ liệu có khai báo là private do trình biên dịch mặc định hiểu như vậy khi không chỉ rõ là public hay là private. Để truy cập đến các thuộc tính dữ liệu có khai báo là private bạn cần phải thông qua các hàm thành viên của lớp.


  1. Đóng file “date212.cpp”




      1. Sử dụng các hàm thành viên truy cập các thuộc tính dữ liệu “private”

Chương trình dưới đây minh hoạ việc sử dụng các hàm thành viên để truy cập các thuộc tính của lớp.


  1. Tạo file mới

  2. Gõ đoạn chương trình sau

#include


class date

{

private:



int day;

int month;

int year;

public:

void getdate (void)

{

cout << “\n Nhap vao ngay (dd): “;



cin >> day;

cout << “\n Nhap vao thang (mm): “ ;

cin >> month;

cout << “\n Nhap vao nam (yy): “ ;

cin >> year;
} //ket thuc ham getdate
void display (void)

{

cout << “\n Ngay la “ << day << “/”;



cout << month << “/” << year << endl;
} // ket thuc ham display

};

void main()

{

date today;



today.getdate();

today.display();

}



  1. Lưu file với tên “date213.cpp”

  2. Dịch và chạy chương trình

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :

Nhap vao ngay (dd): 25

Nhap vao thang (mm): 12

Nhap vao nam (yy): 01

Ngay la 25/12/01

Chương trình trên cài đặt lớp “date”có ba thuộc tính day, month, year kiểu số nguyên và được khai báo là private, hai hàm getdate(), display() được định nghĩa ở trong lớp và được khai báo là public, hai hàm này có thể được truy suất từ bên ngoài lớp.



Trong hàm main() có khai báo đối tượng (object) today có kiểu là date. Dùng toán tử dấu chấm “.” để truy xuất các hàm, gọi today.getdate() để nhập dữ liệu cho đối tượng today, today.display() để thể hiện trên màn hình. Như vậy, để truy xuất các thuộc tính có khai báo là private bạn phải thông qua các hàm thành viên.


  1. Đóng file “date213.cpp”




      1. Truyền tham số đối tượng cho các hàm thành viên

  1. Tạo file mới

  2. Gõ đoạn chương trình sau

#include


class Time

{

private:



int hours, minutes, seconds;

public:

void getinfo (void)

{

cin >> hours >> minutes >> seconds;



} //ket thuc ham getinfo

void display (void)

{

cout<

} // ket thuc ham display
void addit( Time aa, Time 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++;

}

}



};
void main()

{

Time 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();

}



  1. Lưu file với tên “time214.cpp”

  2. Dịch và chạy chương trình

Chú ý khi nhập giờ phút giây bạn phải nhập khoảng trắng giữa các giá trị.

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :

Nhap vao thoi gian mot (gio phut giay): 12 30 53

Nhap vao thoi gian hai (gio phut giay): 4 15 28

Ket qua la 16:46:21

Ngay la 25/12/01

Trong hàm main() ở chương trình trên có khai báo ba đối tượng của lớp Time là one, two, three. Thông tin của đối tượng one, two được cung cấp thông qua gọi hàm getinfo của từng đối tượng. Đối tượng three có được thông tin thông qua gọi hàm addit của nó, three.addit(one, two); ở lời gọi hàm này, ta đã truyền hai đối tượng one và two vào cho hàm addit, trong hàm addit aa, bb sẽ là các đối tượng đại diện cho one, two và các biến hours, minutes, seconds là các thuộc tính của đối tượng three.
5. Đóng file “time214.cpp”


    1. Mảng các đối tượng

Mảng các đối tượng cùng loại được sử dụng giống như mảng kiểu dữ liệu cơ sở. Chương trình sau xây đựng lớp Student và sử dụng mảng Student trong chương trình chính.


  1. Tạo file mới

  2. Gõ đoạn chương trình sau

#include



class Student

{

private:



int rollno;

int marks;

public:

void getinfo ()

{

cout << “Nhap vao ma so sinh vien: “;



cin >> rollno ;

cout << “Nhap vao diem: “;

cin >> marks ;

} //ket thuc ham getinfo



void display ()

{

cout<

} // ket thuc ham display
int getmarks()

{

return marks;



} // ket thuc ham getmarks
};// ket thuc lop Student
void main()

{

Student stulist[100];



float total, average;

int no, i;
total = 0.0;

cout << “\n Nhap vao so luong sinh vien: ”;

cin >> no ;
for (i=0; i< no ; i++)

{

stulist[i].getinfo();



total = total + stulist[i].getmarks();

}
cout << “Ma so Diem”<< endl;



for (i=0; i< no; i++)

{

stulist[i].display();



}

average = total / no;

cout << “Diem trung binh cac sinh vien = ” << average;
}// ket thuc ham main


  1. Lưu file với tên “stu22.cpp”

  2. Dịch và chạy chương trình

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :
Nhap vao so luong sinh vien: 3

Nhap vao ma so sinh vien: 1

Nhap vao diem: 13

Nhap vao ma so sinh vien: 2

Nhap vao diem: 15

Nhap vao ma so sinh vien: 3

Nhap vao diem: 19

Ma so Diem

1 13

2 15


3 19

Diem trung binh cac sinh vien = 15.666667



Trong chương trình trên có khai báo mảng 100 đối tượng Student là stulist[100]. Để truy xuất đối tượng có vị trí thứ i ở trong mảng ta sử dụng stulist[i]. stulist[i].getinfo(); câu lệnh này gọi hàm getinfo() của đối tượng ở vị trí i trong mảng. Chú ý mảng trong C++ có chỉ số bắt đầu từ 0.

Bµi tËp lµm thªm

Viết chương trình quản lý học sinh với các chức năng sau:

Thêm một học sinh

Tìm thông tin các học sinh khi biết tên.

Tìm học sinh có điểm trung bình cao nhất

Xoá học sinh ra khỏi danh sách.

In danh sách hoc sinh.



class Hocsinh

{

private:



int maso;

char hoten[30];

int toan, ly, hoa, van, su, dia, anhvan;

public:

void nhapthongtin(); //nhap thong tin cho hoc sinh

void hienthi(); //hien thi thong tin hoc sinh len man hinh

float diemtrungbinh();//lay diem trung binh cua hoc sinh



char *ten(); //lay ten cua hoc sinh

}

Bµi thùc hµnh:



BÀI THỰC HÀNH SỐ 3

Môc tiªu:

• Constructors.

• Destructors.

Hàm chng (overloading).

• Hàm friend.

BÀI TẬP THỰC HÀNH

3.1. Constructors vµ destructors:

3.2. Constructors vµ destructors víi cÊp ph¸t ®éng:

3.3. §a n¨ng hãa hµm (hµm chång):

4.4 Hµm friend:

3.1. Constructors vµ destructors:

Trong phÇn nµy c¸c b¹n sÏ viÕt mét sè ch­¬ng tr×nh trong ®ã cã sö dông c¸c hµm constructors (hµm khëi t¹o) vµ destructors (hµm hñy) ®Ó lµm râ thªm vÒ hai kh¸i niÖm nµy.

Khi mét ®èi t­îng ®­îc t¹o, c¸c thµnh viªn cña nã cã thÓ ®­îc khëi t¹o bëi mét hµm constructor. Hµm constructors sÏ ®­îc gäi mét c¸ch tù ®éng ®Ó thùc hiÖn c«ng viÖc nµy mµ kh«ng ph¶i gäi bÊt cø hµm nµo thuéc líp. Còng ho¹t ®éng gièng nh­ vËy, nh­ng hµm destructors sÏ ®­îc gäi tù ®éng khi líp bÞ hñy.

Trong ch­¬ng tr×nh d­íi ®©y c¸c b¹n sÏ thÊy c¸ch mµ c¸c hµm constructors vµ destructors thùc thi. Ch­¬ng tr×nh sÏ sö dông hµm constructor ®Ó khëi t¹o mét vïng h×nh ch÷ nhËt th«ng qua hai thuéc tÝnh cña nã lµ nWidth (chiÒu dµi) vµ nHeight (chiÒu réng).




#include
#include
class CRectangle
{

    private:


        int nHeight; //chieu dai hinh chu nhat
        int nWidth; //chieu rong hinh chu nhat
    public:
        CRectangle(); //ham constructor
        int Area(); //ham tinh dien tich hinh chu nhat
        void Initialize(int,int);

        ~CRectangle(); //ham destructor

};

CRectangle::CRectangle()


{
    cout << "Khoi tao cac thuoc tinh bang ham constructor\n";
    nHeight = 6;
    nWidth = 8;
}

int CRectangle::Area()
{
  return nHeight*nWidth;
}

void CRectangle::Initialize(int Rong,int Dai)
{
    cout << "khoi tao lai hinh chu nhat voi cac bien duoc dua vao\n";
    nWidth = Rong;
    nHeight = Dai;
}

CRectangle::~CRectangle()


{
    cout << "destructor dang duoc goi\n";
}

void main()
{
    clrscr();
    CRectangle Box,Square;
    cout << "Dien tich cua Box la: "<< Box.Area() << "\n";
    cout << "Dien tich cua Square la: "<< Square.Area() << "\n";
    Box.Initialize(12,8);
    Square.Initialize(8,8);
    cout << "Dien tich cua Box la: "<< Box.Area() << "\n";
    cout << "Dien tich cua Square la: "<< Square.Area() << "\n";
}

Khi ch¹y ch­¬ng tr×nh trªn chóng ta sÏ thu ®­îc kÕt qu¶ nh­ sau:

Khoi tao cac thuoc tinh bang ham constructor
Khoi tao cac thuoc tinh bang ham constructor
Dien tich cua Box la: 48
Dien tich cua Square la: 48
khoi tao lai hinh chu nhat voi cac bien duoc dua vao
khoi tao lai hinh chu nhat voi cac bien duoc dua vao
Dien tich cua Box la: 96
Dien tich cua Square la: 64
destructor dang duoc goi
destructor dang duoc goi

Ch­¬ng tr×nh trªn khai b¸o mét líp tªn lµ CRectangle. Trong líp cã 2 biÕn private kiÓu integer. Trong c¸c hµm public cã mét hµm constructor vµ mét hµm destructor. Hµm constructor th× cã cïng tªn víi tªn líp cña nã. Hµm destructor ®­îc ®Æt tªn còng theo mét c¸ch nh­ vËy nh­ng cã thªm dÊu ~ ë phÝa tr­íc tªn hµm ®ã.

Mçi lÇn mét ®èi t­îng ®­îc t¹o ra trong hµm main() th× hµm constructor cña nã sÏ ®­îc thùc hiÖn. Trong hµm main() cã khai b¸o hai ®èi t­îng thuéc líp CRectangle. Trong hµm constructor cã ®­a vµo lÖnh ®Ó hiÓn thÞ dßng "Khoi tao cac thuoc tinh bang ham constructor" trªn mµn h×nh. Trong hµm main khi ta võa khai b¸o 2 ®èi t­îng Box vµ Square th× c¸c constructors cña nã ®­îc gäi nªn ë mµn h×nh output sÏ cã hai dßng:

Khoi tao cac thuoc tinh bang ham constructor

Vµ diÖn tÝch cña 2 h×nh ch÷ nhËt nµy sÏ ®­îc tÝnh dùa trªn c¸c gi¸ trÞ ®· ®­îc khëi t¹o trong hµm constructor (nWidth = 8,nHeight = 6). Khi ®ã diÖn tÝch cña hai h×nh ch÷ nhËt nµy lµ 48.

Sau ®ã ch­¬ng tr×nh sÏ gäi hµm Initialize() cña Box vµ Square ®Ó g¸n l¹i gi¸ trÞ míi cho c¸c thuéc tÝnh nWidth, nHeight cña tõng ®èi t­îng.

Box.Initialize(12,8);


   Square.Initialize(8,8);

Khi ®ã diÖn tÝch cña Box vµ Square lÇn l­ît lµ 96, 64. V× c¸c gi¸ trÞ thuéc tÝnh cña 2 h×nh ch÷ nhËt nµy ®· ®­îc g¸n l¹i víi c¸c gi¸ trÞ kh¸c nhau. Khi hµm Initialize() cña Box vµ Square ®­îc gäi th× mµn h×nh output sÏ in ra mµn h×nh 2 dßng:



khoi tao lai hinh chu nhat voi cac bien duoc dua vao

khoi tao lai hinh chu nhat voi cac bien duoc dua vao

Khi 2 ®èi t­îng Box vµ Square bÞ hñy vµo cuèi hµm main, hµm destructor cña c¸c ®èi t­îng nµy sÏ ®­îc tù ®éng thùc thi. ë trong mµn h×nh output chóng ta sÏ thÊy 2 dßng sau, do 2 hµm destructor ®­îc thùc hiÖn:



destructor dang duoc goi

destructor dang duoc goi

Trong ch­¬ng tr×nh d­íi ®©y, chóng ta sÏ viÕt mét líp víi tªn lµ CTime. Kh«ng gièng nh­ líp CRectangle ë trªn trong líp CTime cßn cã thªm mét constructor khëi t¹o c¸c gi¸ trÞ hours, minutes, seconds cña líp CTime. Vµ qua ®ã c¸c b¹n sÏ thÊy râ h¬n c¸c hµm constructor ®­îc gäi khi víi tham sè hoÆc kh«ng cã tham sè. Vµ líp nµy cã mét hµm destructor ®Ó gäi khi líp bÞ hñy.

C¸c b¹n t¹o file vµ ®¸nh vµo ch­¬ng tr×nh sau:

#include

#include


class CTime

{

private:



int nHours,nMinutes,nSeconds;

//bien luu gio, phut, giay cua lop CTime

public:

CTime(); //ham constructor khong doi so

CTime(int h,int m,int s);//ham constructor 3 doi so

void Display();

void AddIt(CTime Time1,CTime Time2);

~CTime(); //ham destructor

};
CTime::CTime()

{

cout << "ham constructor mac dinh\n";



nHours = nMinutes = nSeconds = 0;

}
CTime::CTime(int h,int m,int s)

{

cout << "ham constructor voi 3 doi so\n";



nHours = h;

nMinutes = m;

nSeconds = s;

}
void CTime::Display()

{

cout << nHours << ':' << nMinutes << ':' << nSeconds << endl;



}
void CTime::AddIt(CTime Time1,CTime Time2)

{

nHours = Time1.nHours + Time2.nHours;



nMinutes = Time1.nMinutes + Time2.nMinutes;

nSeconds = Time1.nSeconds + Time2.nSeconds;

//kiem tra nSeconds > 60

if(nSeconds >= 60)

{

nSeconds -= 60;



nMinutes ++;

}

//kiem tra nMinutes > 60



if(nMinutes >= 60)

{

nMinutes -= 60;



nHours ++;

}

}


CTime::~CTime()

{

cout << "Ham destructor\n";



}
void main()

{

clrscr();



CTime Result;

CTime T1(1,49,50);

CTime T2(3,40,30);

Result.AddIt(T1,T2);

cout << "Ket qua la: ";

Result.Display();

}

KÕt qu¶ sau khi thùc hiÖn ch­¬ng tr×nh trªn lµ:



ham constructor mac dinh

ham constructor voi 3 doi so

ham constructor voi 3 doi so

Ham destructor

Ham destructor

Ket qua la: 5:30:20

Ham destructor

Ham destructor


Ham destructor

Trong ch­¬ng tr×nh trªn, líp CTime cã ®Õn 2 constructors ®Ó khëi t¹o nã. Mét constructor th× kh«ng cã ®èi sè vµ mét cßn l¹i th× cã 3 ®èi sè.. Hµm constructor kh«ng cã ®èi sè lµ hµm constructor mÆc ®Þnh sÏ ®­îc gäi. Trong hµm main(), biÕn Result, khi khai b¸o:

CTime Result;

Th× hµm constructor sÏ ®­îc gäi cho ®èi t­îng Result lµ constructor mÆc ®Þnh kh«ng cã ®èi sè. V× thÕ trong mµn h×nh output chóng ta sÏ thÊy xuÊt hiÖn dßng sau:

ham constructor mac dinh

Víi hµm constructor mÆc ®Þnh nµy th× c¶ ba thuéc tÝnh cña líp CTimenHours, nMinutes, nSeconds ®Òu g¸n gi¸ trÞ lµ 0. Khi ®èi t­îng ®­îc khai b¸o nh­ sau th× constructor cßn l¹i sÏ ®­îc gäi:

CTime T1(1,49,50);

CTime T2(3,40,30);

Khi khai b¸o hai ®èi t­îng T1 vµ T2 chóng ta ®­a vµo cho Time1, Time2 ba ®èi sè, khi ®ã hµm constructor CTime(int,int,int) sÏ ®­îc gäi víi 3 ®èi sè lµ 3 gi¸ trÞ chóng ta ®­a vµo. V× hai ®èi t­îng ®­îc khai b¸o nªn constructor sÏ ®­îc gäi lÇn l­ît cho T1 vµ T2 nªn chóng ta sÏ nhËn ®­îc tiÕp theo 2 dßng sau trong mµn h×nh output:

ham constructor voi 3 doi so

ham constructor voi 3 doi so

Hai dßng tiÕp theo trong mµn h×nh output chóng ta sÏ thÊy hai dßng gièng nhau lµ:

Ham destructor

NÕu nh­ chØ hiÓu theo nghÜa lµ hµm destructor chØ ®­îc gäi khi mét ®èi t­îng bÞ hñy th× chóng ta thÊy trong ch­¬ng tr×nh 3 ®èi t­îng khai b¸o cña chóng ta vÉn ch­a bÞ hñy cho tíi dßng lÖnh tiÕp theo sau nã. ThËt ra, trong ch­¬ng tr×nh cña chóng ta cã gäi hµm AddIt cña ®èi t­îng Result, víi 2 ®èi sè cña nã lµ T1 vµ T2. Mµ hµm destructor còng sÏ ®­îc thùc hiÖn t¹i cuèi bÊt kú hµm nµo mµ ®èi sè cña nã lµ mét líp hay mét ®èi t­îng nµo ®ã ®­îc khai b¸o trong hµm. §©y chÝnh lµ lý do mµ hai dßng hiÓn thÞ cña hµm destructor hiÖn ra mµn h×nh output. Vµ hµm destructor cña líp CTime còng sÏ ®­îc gäi 3 lÇn vµo cuèi hµm main(), v× khi ®ã 3 ®èi t­îng Result, T1, T2 bÞ hñy.

Trong líp CTime xuÊt hiÖn cïng mét lóc hai hµm constructor víi hai tham sè kh¸c nhau ta gäi ®ã lµ ®a n¨ng hãa hµm constructor mµ ta sÏ xÐt ë phÇn sau.
3.2. Constructors vµ destructors víi cÊp ph¸t ®éng:
Trong C++ to¸n tö new th­êng xuÊt hiÖn trong hµm constructors khi khëi t¹o ®èi t­îng. Vµ vïng nhí cÊp ph¸t nµy ph¶i ®­îc xãa khi ®èÝ t­îng bÞ hñy, nªn to¸n tö delete dïng ®Ó xãa vïng nhí ®­îc cÊp ph¸t b»ng to¸n tö new th­êng ®­îc ®Ó trong hµm destructors.

Trong ch­¬ng tr×nh d­íi ®©y chóng ta sÏ x©y dùng mét líp mµ thuéc tÝnh cña nã lµ mét chuçi. Trong hµm constructor cña líp nµy chóng ta sÏ sö dông to¸n tö new ®Ó cÊp ph¸t vïng nhí cho chuçi nµy. Trong hµm destructor cña líp chóng ta sÏ dïng to¸n tö delete ®Ó xãa vïng nhí nµy ®i.

C¸c b¹n h·y më mét file míi vµ ®¸nh vµo ®ã ch­¬ng tr×nh sau:

#include

#include

#include

class CString

{

private:



char* strName;

public:

CString(char* str)

{

int size = strlen(str);

strName = new char[size + 1];

strcpy(strName,str);

}

void Display()

{

cout << strName << endl;



cout<<"Chieu dai cua chuoi = "<

}

~CString()



{

delete []strName;

}

};

void main()



{

clrscr();

CString strFirst("Chao cac ban");

CString strSecond("Chao tam biet");

strFirst.Display();

strSecond.Display();

}



Vµ khi ch­¬ng tr×nh ®­îc ch¹y nã sÏ cho kÕt qu¶ ë mµn h×nh output nh­ sau:
Chao cac ban
Chieu dai cua chuoi = 12
Chao tam biet

Chieu dai cua chuoi = 13

Trong ch­¬ng tr×nh trªn líp CString chØ cã mét thuéc tÝnh, mét con trá kiÓu char, cã tªn lµ strName. Con trá nµy sÏ trá ®Õn mét chuçi cã chiÒu dµi ®éng mçi khi ®èi t­îng ®­îc t¹o.

Hµm constructor lÊy mét ®èi sè lµ chuçi sÏ ®­îc g¸n cho biÕn strName cña líp CString vµ biÕn nµy sÏ ®­îc cÊp ph¸t mét vïng nhí b»ng to¸n tö new cã kÝch th­íc ®óng b»ng víi kÝch th­íc cña ®èi sè ®­îc ®­a vµo hµm constructor cña líp. Hµm Display cña líp CString dïng ®Ó hiÓn thÞ chuçi strName vµ ®é dµi cña nã ra mµn h×nh. Trong hµm destructor ch­¬ng tr×nh sÏ dïng to¸n tö delete ®Ó xãa ®i vïng nhí ®· ®­îc cÊp ph¸t cho biÕn strName.

3.3. §a n¨ng hãa hµm (hµm chång):

Trong phÇn nµy chóng ta sÏ viÕt mét ch­¬ng tr×nh mµ trong ®ã cã nhiÒu hµm cïng tªn víi nhau, nh­ng nã kh¸c nhau vÒ sè ®èi sè hay kiÓu cña c¸c ®èi sè ®ã. C¸c hµm nh­ vËy ®­îc gäi lµ c¸c hµm chång nhau. C¸c ®èi sè sÏ lµ sù ph©n biÖt kh¸c nhau ®Ó biÕt hµm nµo ®­îc gäi, kiÓu tr¶ vÒ cña hµm kh«ng ®­îc dïng ®Ó ph©n biÖt c¸c hµm nµy.

Ch­¬ng tr×nh d­íi ®©y sÏ khai b¸o mét líp CWords trong ®ã nã cã c¸c thuéc tÝnh lµ sè nguyªn vµ mét chuçi ký tù.

Më file vµ nhËp vµo ch­¬ng tr×nh sau ®©y:



#include

#include

#include

class CWords

{

private:



int nNum;

char strTitle[20];

public:

CWords()


{

nNum = 0;

strcpy(strTitle," ");

}

void Display(int i)

{

nNum = i;



cout << "Tham so la " << nNum << endl;

cout << "Day khong phai la chuoi" << endl;

}

void Display(char c)

{

strTitle[0] = c;



cout << "Tham so la " << strTitle[0] << endl;

cout << "Day la mot ky tu" << endl;

}

void Display(char* str)

{

strcpy(strTitle,str);



cout << "Tham so la " << strTitle << endl;

cout << "Day la mot chuoi" << endl;

}

void Display(char* str,int i)

{

strcpy(strTitle,str);



nNum = i;

cout<<"Tham so la "<

cout << "Day la mot chuoi" << endl;

}

};



void main()

{

clrscr();



CWords X;

X.Display(120);

X.Display('A');

X.Display("String");

X.Display("String",10);

}

Khi biªn dÞch ch­¬ng tr×nh trªn vµ thùc hiÖn nã ta ®­îc kÕt qu¶ nh­ sau:

Tham so la 120

Day khong phai la chuoi

Tham so la A

Day la mot ky tu



tải về 0.54 Mb.

Chia sẻ với bạn bè của bạn:
  1   2   3




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương