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

Hàm tạo sao chép của lớp dẫn xuất

6 488 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 sao chép của lớp dẫn xuất
Trường học University of Science and Technology
Chuyên ngành Computer Science
Thể loại Bài báo
Thành phố Hanoi
Định dạng
Số trang 6
Dung lượng 13,86 KB

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

Nội dung

Hàm tạo sao chép của lớp dẫn xuất 8.1.. Khi nào cần xây dựng hàm tạo sao chép: Khi lớp dẫn xuất có các thuộc tính kể cả thuộc tính thừa kế từ các lớp cơ sở là con trỏ, thì nhất thiết khô

Trang 1

Hàm tạo sao chép của lớp dẫn xuất 8.1 Khi nào cần xây dựng hàm tạo sao chép: Khi lớp dẫn xuất có các thuộc tính (kể cả thuộc

tính thừa kế từ các lớp cơ sở) là con trỏ, thì nhất thiết không được dùng hàm tạo sao chép mặc định, mà phải xây dựng cho lớp dẫn xuất một hàm tạo sao chép

8.2 Cách xây dựng hàm tạo sao chép cho lớp dẫn xuất

+ Trước hết cần xây dựng toán tử gán cho lớp dẫn xuất (xem §7)

+ Sau đó xây dựng hàm tạo sao chép cho lớp dẫn xuất theo mẫu:

Tên_lớp_dẫn_xuất (Tên_lớp_dẫn_xuất &h )

{

*this = h ;

}

8.3 Ví dụ

Chương trình dưới đây minh hoạ cách xây dựng hàm tạo sao chép cho lớp D có 2 lớp cơ sở

là C và B (C là lớp cơ sở trực tiếp, còn B là cơ sở của C) Ngoài ra D còn có một thuộc tính là đối tượng của lớp A Chương trình này dựa trên chương trình trong mục 7.3 với 2 thay đổi: + Xây dựng thêm hàm tạo sao chép cho lớp D

+ Thay đổi một số câu lệnh trong hàm main để sử dùng hàm tạo sao chép

Để thấy rõ vai trò của hàm tạo sao chép chúng ta hãy so sánh kết quả nhận được trong 2 trường hợp: Có hàm tạo sao chép và bỏ đi hàm này

//CT5-09

// Thua ke nhieu muc

// Ham tao sao chep

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

#include <string.h>

class A

{

private:

int a;

char *str ;

public:

A()

{

a=0; str=NULL;

}

A& operator=(A& h)

{

Trang 2

this->a = h.a;

if (this->str!=NULL) delete this->str;

this->str = strdup(h.str);

return h;

}

void nhap()

{

cout << "\nNhap so nguyen lop A: " ; cin >> a ;

if (str!=NULL) delete str;

cout << "\nNhap chuoi lop A: " ;

char tg[30];

fflush(stdin); gets(tg);

str = strdup(tg);

}

void xuat()

{

cout << "\n" << "So nguyen lop A= " << a

<< " Chuoi lop A: " << str ; }

} ;

class B

{

private:

int b;

char *str ;

public:

B()

{

b=0; str=NULL;

}

B* getB()

{

return this;

}

B& operator=(B& h)

{

this->b = h.b;

if (this->str!=NULL) delete this->str;

this->str = strdup(h.str);

Trang 3

return h;

}

void nhap()

{

cout << "\nNhap so nguyen lop B: " ; cin >> b ;

if (str!=NULL) delete str;

cout << "\nNhap chuoi lop B: " ;

char tg[30];

fflush(stdin); gets(tg);

str = strdup(tg);

}

void xuat()

{

cout << "\n" << "So nguyen lop B = " << b

<< " Chuoi lop B: " << str ; }

} ;

class C : public B

{

private:

int c;

char *str ;

public:

C():B()

{

c=0; str=NULL;

}

C* getC()

{

return this;

}

C& operator=(C& h)

{

B *b1, *b2;

b1= this->getB();

b2= h.getB();

*b1 = *b2;

this->c = h.c;

if (this->str!=NULL) delete this->str;

Trang 4

this->str = strdup(h.str);

return h;

}

void nhap()

{

B::nhap();

cout << "\nNhap so nguyen lop C: " ; cin >> c ;

if (str!=NULL) delete str;

cout << "\nNhap chuoi lop C: " ;

char tg[30];

fflush(stdin); gets(tg);

str = strdup(tg);

}

void xuat()

{

B::xuat();

cout << "\n" << "So nguyen lop C = " << c

<< " Chuoi lop C: " << str ; }

} ;

class D : public C

{

private:

int d;

char *str ;

A u;

public:

D():C(),u()

{

d=0; str=NULL;

}

D(D& h) // Ham tao sao chep

{

*this=h;

}

D& operator=(D& h)

{

this->u = h.u;

Trang 5

C *c1,*c2;

c1 = this->getC();

c2 = h.getC();

*c1 = *c2;

this->d = h.d;

if (this->str!=NULL) delete this->str;

this->str = strdup(h.str);

return h;

}

void nhap()

{

u.nhap();

C::nhap();

cout << "\nNhap so nguyen lop D: " ; cin >> d ;

if (str!=NULL) delete str;

cout << "\nNhap chuoi lop D: " ;

char tg[30];

fflush(stdin); gets(tg);

str = strdup(tg);

}

void xuat()

{

u.xuat();

C::xuat();

cout << "\n" << "So nguyen lop D = " << d

<< " Chuoi lop D: " << str ; }

} ;

void main()

{

D h1;

clrscr();

h1.nhap();

D h2(h1);

cout<<"\n\nH2:";

h2.xuat();

h1.nhap();

cout<<"\n\nH2:";

h2.xuat();

Trang 6

cout<<"\n\nH1:"; h1.xuat();

getch();

}

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

TỪ KHÓA LIÊN QUAN

w