1. Trang chủ
  2. » Công Nghệ Thông Tin

Hàm tạo, hàm huỷ đối với tính thừa kế

5 410 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hàm tạo, hàm huỷ đối với tính thừa kế
Thể loại bài giảng
Định dạng
Số trang 5
Dung lượng 20,06 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lớp dẫn xuất không thừa kế các hàm tạo, hàm huỷ, toán tử gán của các lớp cơ sở 2.2.. Cách xây dựng hàm tạo của lớp dẫn xuất + Hàm tạo cần có các đối để khởi gán cho các thuộc tính thành

Trang 1

Hàm tạo, hàm huỷ đối với tính thừa kế 2.1 Lớp dẫn xuất không thừa kế các hàm tạo, hàm huỷ, toán tử gán của các lớp cơ sở 2.2 Cách xây dựng hàm tạo của lớp dẫn xuất

+ Hàm tạo cần có các đối để khởi gán cho các thuộc tính (thành phần dữ liệu) của lớp + Có thể phân thuộc tính làm 3 loại ứng với 3 cách khởi gán khác nhau:

1 Các thuộc tính mới khai báo trong lớp dẫn xuất Trong các phương thức của lớp dẫn xuất

có thể truy xuất đến các thuộc tính này Vì vậy chúng thường được khởi gán bằng các câu lệnh gán viết trong thân hàm tạo

2 Các thành phần kiểu đối tượng Trong lớp dẫn xuất không cho phép truy nhập đến các thuộc tính của các đối tượng này Vì vậy để khởi gán cho các đối tượng thành phần cần dùng hàm tạo của lớp tương ứng Điều này đã trình bầy trong mục §8 chương 4

3 Các thuộc tính thừa kế từ các lớp cở sở Trong lớp dẫn xuất không được phép truy nhập đến các thuộc tính này Vì vậy để khởi gán cho các thuộc tính nói trên, cần sử dụng hàm tạo của lớp cơ sở Cách thức cũng giống như khởi gán cho các đối tượng thành phần, chỉ khác nhau ở chỗ: Để khởi gán cho các đối tượng thành phần ta dùng tên đối tượng thành phần, còn

để khởi gán cho các thuộc tính thừa kế từ các lớp cơ sở ta dùng tên lớp cơ sở:

Tên_đối_tượng_thành_phần(danh sách giá trị)

Tên_lớp_cơ_sở(danh sách giá trị)

Danh sách giá trị lấy từ các đối của hàm tạo của lớp dẫn xuất đang xây dựng

(xem ví dụ mục 2.4 và §6, ví dụ 1)

2.3 Hàm huỷ

Khi một đối tượng của lớp dẫn xuất được giải phóng (bị huỷ), thì các đối tượng thành phần

và các đối tượng thừa kế từ các lớp cơ sở cũng bị giải phóng theo Do đó các hàm huỷ tương ứng sẽ được gọi đến

Như vậy khi xây dựng hàm huỷ của lớp dẫn xuất, chúng ta chỉ cần quan tâm đến các thuộc tính (không phải là đối tượng) khai báo thêm trong lớp dẫn xuất mà thôi Ta không cần để ý đến các đối tượng thành phần và các thuộc tính thừa kế từ các lớp cơ sở (xem ví dụ mục 2.4 và

§

6, ví dụ 2)

2.4 Ví dụ xét các lớp

+ Lớp NGUOI gồm:

- Các thuộc tính

char *ht ; // Họ tên

int ns ;

- Hai hàm tạo, phương thức in() và hàm huỷ

+ Lớp MON_HOC gồm:

- Các thuộc tính

char *monhoc ; // Tên môn học

Trang 2

int st ; // Số tiết

- Hai hàm tạo, phương thức in() và hàm huỷ

+ Lớp GIAO_VIEN :

- Kế thừa từ lớp NGUOI

- Đưa thêm các thuộc tính

char *bomon ; // Bộ môn công tác

MON_HOC mh ; // Môn học đang dậy

- Hai hàm tạo , phương thức in() và hàm huỷ

Hãy để ý cách xây dựng các hàm tạo, hàm huỷ của lớp dẫn xuất GIAO_VIEN Trong lớp GIAO_VIEN có thể gọi tới 2 phương thức in():

GIAO_VIEN::in() // Được xây dựng trong lớp GIAO_VIEN

NGUOI::in() // Thừa kế từ lớp NGUOI

Hãy chú ý cách gọi tới 2 phương thức in() trong chương trình dưới đây

//CT5-03

// Ham tao cua lop dan suat

#include <conio.h>

#include <iostream.h>

#include <string.h>

class MON_HOC

{

private:

char *monhoc;

int st;

public:

MON_HOC()

{

monhoc=NULL;

st=0;

}

MON_HOC(char *monhoc1, int st1)

{

int n = strlen(monhoc1);

monhoc = new char[n+1];

strcpy(monhoc,monhoc1);

st=st1;

}

~ MON_HOC()

{

if (monhoc!=NULL)

{

Trang 3

delete monhoc;

st=0;

}

}

void in()

{

cout << "\nTen mon: " << monhoc << " so tiet: " << st;

}

} ;

class NGUOI

{

private:

char *ht;

int ns;

public:

NGUOI()

{

ht=NULL;

ns=0;

}

NGUOI(char *ht1, int ns1)

{

int n = strlen(ht1);

ht = new char[n+1];

strcpy(ht,ht1);

ns=ns1;

}

~NGUOI()

{

if (ht!=NULL)

{

delete ht;

ns=0;

}

}

void in()

{

cout << "\nHo ten : " << ht << " nam sinh: " << ns;

}

} ;

Trang 4

class GIAO_VIEN : public NGUOI

{

private:

char *bomon;

MON_HOC mh;

public:

GIAO_VIEN():mh(),NGUOI()//Su dung ham tao khong doi

{

bomon=NULL;

}

GIAO_VIEN(char *ht1, int ns1, char *monhoc1,int st1, char *bomon1 ): NGUOI(ht1,ns1),mh(monhoc1, st1)

{

int n = strlen(bomon1);

bomon = new char[n+1];

strcpy(bomon,bomon1);

}

~GIAO_VIEN()

{

if (bomon!=NULL)

delete bomon;

}

void in()

{

// Su dung phuong thuc in

NGUOI::in();

cout << "\n Cong tac tai bo mon: " << bomon;

mh.in();

}

};

void main()

{

clrscr();

GIAO_VIEN g1; // Goi toi cac ham tao khong doi

GIAO_VIEN *g2;

//Goi toi cac ham tao co doi

g2 = new GIAO_VIEN("PHAM VAN AT", 1945, "CNPM",

60, "TIN HOC");

g2->in();

/*

co the viet

Trang 5

*/

g2->NGUOI::in();

getch();

delete g2; // Goi toi cac ham huy getch();

}

Ngày đăng: 24/10/2013, 15:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w