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

Hàm tạo sao chép (copy constructor)

8 813 5
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 (copy constructor)
Định dạng
Số trang 8
Dung lượng 18,21 KB

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

Nội dung

Khi đó: ư ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, ỡ cõu lệnh này sẽ gọi tới một ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ọi tới một

Trang 1

Hàm t o sao chép (copy constructor) ạo sao chép (copy constructor) 4.1 Hàm t o sao chép m c đ nh ạo sao chép (copy constructor) ặc định ịnh

Gi s đó đ nh nghĩa m t l p nào đó, ví d l p PS (phân s ) Khi đó:ử đó định nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó:

+ Ta có th dùng câu l nh khai báo ho c c p phát b nh đ t o các đ i tệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ặc cấp phát bộ nhớ để tạo các đối tượng mới, ấp phát bộ nhớ để tạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ạo các đối tượng mới, ố) Khi đó: ượng mới,ng m i,ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

ví d :ụ lớp PS (phân số) Khi đó:

PS p1, p2 ;

PS *p = new PS ; + Ta cũng có th dùng l nh khai báo đ t o m t đ i tệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ượng mới,ng m i t m t đ i tớp nào đó, ví dụ lớp PS (phân số) Khi đó: ừ một đối tượng đó ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ượng mới,ng đó

t n t i, v d :ồn tại, vớ dụ: ạo các đối tượng mới, ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ụ lớp PS (phân số) Khi đó:

PS u;

PS v(u) ; // T o v theo uạo các đối tượng mới,

ý nghĩa c a cõu l nh này nh sau: ủa cõu lệnh này như sau: ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ư

- N u trong l p PS ch a xây d ng hàm t o sao chép, th cõu l nh này sẽ g i t i m tớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, ỡ cõu lệnh này sẽ gọi tới một ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ọi tới một ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: hàm t o sao chép m c đ nh (c a C++) Hàm này sẽ sao chép n i dung t ng bit c a u vàoạo các đối tượng mới, ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau: ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ừ một đối tượng đó ủa cõu lệnh này như sau: các bit tư ng ng c a v Nh v y các vùng nh c a u và v sẽ có n i dung nh nhau Rủa cõu lệnh này như sau: ư ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau: ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư ừ một đối tượng đó ràng trong đa s các trố) Khi đó: ường hợp, nếu lớp không có các thuộc tính kiểu con trỏ hayng h p, n u l p không có các thu c tính ki u con tr hayợng mới, ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ỏ hay tham chi u, th vi c d ng c c hàm t o sao ch p m c đ nh (đ t o ra m t đ i tỡ cõu lệnh này sẽ gọi tới một ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ỏ hay ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ượng mới,ng

m i có n i dung nh m t đ i tớp nào đó, ví dụ lớp PS (phân số) Khi đó: ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ượng mới,ng cho trướp nào đó, ví dụ lớp PS (phân số) Khi đó:c) là đ và không c n xây d ng m t hàmủa cõu lệnh này như sau: ần xây dựng một hàm ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó:

t o sao chép m i.ạo các đối tượng mới, ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

- N u trong l p PS đó cú hàm t o sao ch p (c ch vi t sẽ núi sau) th cõu l nh:ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ỏ hay ỡ cõu lệnh này sẽ gọi tới một ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới,

PS v(u) ;

sẽ t o ra đ i tạo các đối tượng mới, ố) Khi đó: ượng mới,ng m i v, sau đó g i t i hàm t o sao chép đ kh i gán v theo u.ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ọi tới một ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ạo các đối tượng mới, ởi gán v theo u

Ví dụ sau minh ho cách dùng hàm t o sao chép m c đ nh:ạo các đối tượng mới, ạo các đối tượng mới, ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó:

Trong chư ng tr nh đ a vào l p PS (phân s ):ỡ cõu lệnh này sẽ gọi tới một ư ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó:

+ Các thu c tính g m: t (t s ) và m (m u).ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ồn tại, vớ dụ: ử đó định nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ẫu)

+ Trong l p không có phớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư ng th c nào c mà ch có 2 hàm b n là các hàm toán tỉ có 2 hàm bạn là các hàm toán tử ạo các đối tượng mới, ử đó định nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó:

nh p (>>) và xu t (<<).ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ấp phát bộ nhớ để tạo các đối tượng mới,

+ N i dung chột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư ng tr nh là: D ng l nh khai b o đ t o m t đ i tỡ cõu lệnh này sẽ gọi tới một ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ỏ hay ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ư ng u (ki u PS)

có n i dung nh đ i tột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư ố) Khi đó: ượng mới,ng đó cú d

//CT4_06.CPP // Ham tao sao chep mac dinh

#include <conio.h>

#include <iostream.h>

class PS { private:

int t,m ; public:

friend ostream& operator<< (ostream& os,const PS &p) 166

Trang 2

os << " = " << p.t << "/" << p.m;

return os;

} friend istream& operator>> (istream& is, PS &p) {

cout << " - Nhap tu va mau: " ;

is >> p.t >> p.m ; return is;

} };

void main() {

PS d;

cout << "\n Nhap PS d"; cin >> d;

cout << "\n PS d " << d;

PS u(d);

cout << "\n PS u " << u;

getch();

}

4.2 Cách xây d ng hàm t o sao chép ựng hàm tạo sao chép ạo sao chép (copy constructor)

+ Hàm t o sao chép s d ng m t đ i ạo các đối tượng mới, ử đó định nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ụ lớp PS (phân số) Khi đó: ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ki u tham chi u đ i t ểu tham chiếu đối tượng ếu đối tượng ối tượng ượng đ kh i gán cho ng ởi gán v theo u

đ i tố) Khi đó: ượng mới,ng m i Hàm t o sao chép đớp nào đó, ví dụ lớp PS (phân số) Khi đó: ạo các đối tượng mới, ượng mới,c vi t theo m u:ẫu)

Tên_l p (const Tên_l p & dt)ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

{ // Các câu l nh dùng các thu c tính c a đ i tệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau: ố) Khi đó: ượng mới,ng dt // đ kh i gán cho các thu c tính c a đ i tởi gán v theo u ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau: ố) Khi đó: ượng mới,ng m i ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

}

+ Ví dụ có th xây d ng hàm t o sao chép cho l p PS nh sau:ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư class PS

{ private:

int t,m ; public:

PS (const PS &p) {

this->t = p.t ; this->m = p.m ; 168

Trang 3

} ;

4.3 Khi nào c n xây d ng hàm t o sao chép ần xây dựng hàm tạo sao chép ựng hàm tạo sao chép ạo sao chép (copy constructor)

+ Nh n xét: ận xét: Hàm t o sao ch p trong v d tr n kh ng kh c g hàm t o sao ch pạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ụ lớp PS (phân số) Khi đó: ờng hợp, nếu lớp không có các thuộc tính kiểu con trỏ hay ụ lớp PS (phân số) Khi đó: ỏ hay ỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó:

m c đ nh ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó:

+ Khi l p kh ng cú c c thu c t nh ki u con tr ho c tham chi u, th d ng hàm t oớp nào đó, ví dụ lớp PS (phân số) Khi đó: ụ lớp PS (phân số) Khi đó: ỏ hay ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ỏ hay ặc cấp phát bộ nhớ để tạo các đối tượng mới, ỡ cõu lệnh này sẽ gọi tới một ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, sao ch p m c đ nh là đ ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau:

+ Khi l p cú c c thu c t nh con tr ho c tham chi u, th hàm t o sao ch p m cớp nào đó, ví dụ lớp PS (phân số) Khi đó: ỏ hay ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ỏ hay ặc cấp phát bộ nhớ để tạo các đối tượng mới, ỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ặc cấp phát bộ nhớ để tạo các đối tượng mới,

đ nh ch a đáp ng định nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư ượng mới,c yêu c u Ví d l p DT (đa th c) trong ần xây dựng một hàm ụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: §3:

class DT

{

private:

int n; // Bac da thuc

double *a; // Tro toi vung nho chua cac he so da thuc

// a0, a1,

public:

DT()

{

this->n=0; this->a=NULL;

}

DT(int n1)

{

this->n=n1 ;

this->a = new double[n1+1];

}

friend ostream& operator<< (ostream& os,const DT &d);

friend istream& operator>> (istream& is,DT &d);

} ;

Bõy gi chỳng ta hóy theo r i xem vi c d ng hàm t o m c đ nh trong đo n chờng hợp, nếu lớp không có các thuộc tính kiểu con trỏ hay ừ một đối tượng đó ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ạo các đối tượng mới, ư ng

tr nh sau sẽ d n đ n sai l m nh th nào:ỡ cõu lệnh này sẽ gọi tới một ẫu) ần xây dựng một hàm ư

DT d ;

// T o đ i tạo các đối tượng mới, ố) Khi đó: ượng mới,ng d ki u DT

cin >> d ;

/* Nh p đ i tậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ố) Khi đó: ượng mới,ng d , g m: nh p m t s nguyên dồn tại, vớ dụ: ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ư ng và

gán cho d.n, c p phát vùng nh cho d.a, nh p các h sấp phát bộ nhớ để tạo các đối tượng mới, ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ố) Khi đó:

c a đa th c và ch a vào vùng nh đủa cõu lệnh này như sau: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ượng mới, ấp phát bộ nhớ để tạo các đối tượng mới,c c p phát

*/

Trang 4

/* Dùng hàm t o m c đ nh đ xây d ng đ i tạo các đối tượng mới, ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ố) Khi đó: ượng mới,ng u theo d

K t qu : u.n = d.n và u.a = d.a Nh v y 2 con tr u.a vàư ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ỏ hay d.a cùng tr đ n m t vùng nh ỏ hay ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

*/

Nh n xét: ận xét: M c đích c a ta là t o ra m t đ i tụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau: ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ượng mới,ng u gi ng nh d, nh ng đ c l p v iố) Khi đó: ư ư ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

d Nghĩa là khi d thay đ i th u kh ng b nh hổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không ỡ cõu lệnh này sẽ gọi tới một ụ lớp PS (phân số) Khi đó: ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ưởi gán v theo u.ng g Th nh ng m c tiêu này khôngỡ cõu lệnh này sẽ gọi tới một ư ụ lớp PS (phân số) Khi đó:

đ t đạo các đối tượng mới, ượng mới,c, v u và d cú chung m t v ng nh ch a h s c a đa th c, nên khi s a đ i cácỡ cõu lệnh này sẽ gọi tới một ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ố) Khi đó: ủa cõu lệnh này như sau: ử đó định nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không

h s c a đa th c trong d th c c h s c a đa th c trong u cũng thay đ i theo Cũnệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ố) Khi đó: ủa cõu lệnh này như sau: ỡ cõu lệnh này sẽ gọi tới một ỏ hay ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ố) Khi đó: ủa cõu lệnh này như sau: ổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không

m t trột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ường hợp, nếu lớp không có các thuộc tính kiểu con trỏ hayng h p n a cũng d n đ n l i là khi m t trong 2 đ i tợng mới, ẫu) ỗi là khi một trong 2 đối tượng u và d bị giải phóng ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ượng mới,ng u và d b gi i phóngịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: (thu h i vùng nh ch a đa th c) th đ i tồn tại, vớ dụ: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ỡ cõu lệnh này sẽ gọi tới một ố) Khi đó: ượng mới,ng cũn l i cũng sẽ kh ng cũn v ng nhạo các đối tượng mới, ụ lớp PS (phân số) Khi đó: ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

n a

Ví d sau sẽ minh ho nh n xét trên: Khi d thay đ i th u cũng thay đ i và ngụ lớp PS (phân số) Khi đó: ạo các đối tượng mới, ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không ỡ cõu lệnh này sẽ gọi tới một ổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không ượng mới, ạo các đối tượng mới,c l i khi u thay đ i th d cũng thay đ i theo.ổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không ỡ cõu lệnh này sẽ gọi tới một ổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không

//CT4_07.CPP

#include <conio.h>

#include <iostream.h>

#include <math.h>

class DT { private:

int n; // Bac da thuc double *a; // Tro toi vung nho chua cac he so da thuc

// a0, a1,

public:

DT() { this->n=0; this->a=NULL;

} DT(int n1) {

this->n=n1 ; this->a = new double[n1+1];

} friend ostream& operator<< (ostream& os,const DT &d);

friend istream& operator>> (istream& is,DT &d);

} ; ostream& operator<< (ostream& os,const DT &d) {

os << " - Cac he so (tu ao): " ; for (int i=0 ; i<= d.n ; ++i)

os << d.a[i] <<" " ; return os;

170

Trang 5

} istream& operator>> (istream& is,DT &d) {

if (d.a!=NULL) delete d.a;

cout << " - Bac da thuc: " ; cin >> d.n;

d.a = new double[d.n+1];

cout << "Nhap cac he so da thuc:\n" ; for (int i=0 ; i<= d.n ; ++i)

{ cout << "He so bac " << i << " = " ;

is >> d.a[i] ; }

return is;

} void main() {

DT d;

clrscr();

cout <<"\nNhap da thuc d " ; cin >> d;

DT u(d);

cout << "\nDa thuc d " << d ; cout << "\nDa thuc u " << u ; cout <<"\nNhap da thuc d " ; cin >> d;

cout << "\nDa thuc d " << d ; cout << "\nDa thuc u " << u ; cout <<"\nNhap da thuc u " ; cin >> u;

cout << "\nDa thuc d " << d ; cout << "\nDa thuc u " << u ; getch();

}

4.4 Ví d v hàm t o sao chép ụ ề hàm tạo sao chép ạo sao chép (copy constructor)

Trong chư ng tr nh tr n đó ch r : Hàm t o sao ch p m c đ nh là ch a tho mónỡ cõu lệnh này sẽ gọi tới một ờng hợp, nếu lớp không có các thuộc tính kiểu con trỏ hay ỉ có 2 hàm bạn là các hàm toán tử ừ một đối tượng đó ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ặc cấp phát bộ nhớ để tạo các đối tượng mới, ịnh nghĩa một lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ư

đ i v i l p DT V v y c n vi t hàm t o sao ch p đ xây d ng đ i tố) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ỡ cõu lệnh này sẽ gọi tới một ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ần xây dựng một hàm ạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ố) Khi đó: ượng mới,ng m i ( ví d u)ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ụ lớp PS (phân số) Khi đó:

t m t đ i từ một đối tượng đó ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ố) Khi đó: ượng mới,ng đang t n t i (ví d d) theo các yêu c u sau:ồn tại, vớ dụ: ạo các đối tượng mới, ụ lớp PS (phân số) Khi đó: ần xây dựng một hàm

+ Gán d.n cho u.n + C p phát m t vùng nh cho u.a đ có th ch a đấp phát bộ nhớ để tạo các đối tượng mới, ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ượng mới,c (d.n + 1) h s ệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ố) Khi đó:

+ Gán các h s ch a trong vùng nh c a d.a sang vùng nh c a u.aệnh khai báo hoặc cấp phát bộ nhớ để tạo các đối tượng mới, ố) Khi đó: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau: ớp nào đó, ví dụ lớp PS (phân số) Khi đó: ủa cõu lệnh này như sau:

172

Trang 6

đ c l p v i d.ột lớp nào đó, ví dụ lớp PS (phân số) Khi đó: ậy các vùng nhớ của u và v sẽ có nội dung như nhau Rừ ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

Đ đáp ng các yêu c u nêu trên, hàm t o sao chép c n đần xây dựng một hàm ạo các đối tượng mới, ần xây dựng một hàm ượng mới,c xây d ng nh sau:ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ư DT::DT(const DT &d)

{

this->n = d.n;

this->a = new double[d.n+1];

for (int i=0;i<=d.n;++i)

this->a[i] = d.a[i];

}

Chư ng tr nh sau sẽ minh ho đi u này: S thay đ i c a d không làm nh hỡ cõu lệnh này sẽ gọi tới một ạo các đối tượng mới, ều này: Sự thay đổi của d không làm ảnh hưởng ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới một ổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không ủa cõu lệnh này như sau: ưởi gán v theo u.ng

đ n u và ngượng mới, ạo các đối tượng mới, ựng hàm tạo sao chép, thỡ cõu lệnh này sẽ gọi tới mộtc l i s thay đ i c a u không làm nh hổi thỡ u khụng bị ảnh hưởng gỡ Thế nhưng mục tiêu này không ủa cõu lệnh này như sau: ưởi gán v theo u.ng đ n d

//CT4_08.CPP

// Vi t hàm t o sao chép cho l p DTạo các đối tượng mới, ớp nào đó, ví dụ lớp PS (phân số) Khi đó:

#include <conio.h>

#include <iostream.h>

#include <math.h>

class DT

{

private:

int n; // Bac da thuc

double *a; // Tro toi vung nho chua cac he so da thuc

// a0, a1,

public:

DT()

{

this->n=0; this->a=NULL;

}

DT(int n1)

{

this->n=n1 ;

this->a = new double[n1+1];

}

DT(const DT &d);

friend ostream& operator<< (ostream& os,const DT &d);

friend istream& operator>> (istream& is,DT &d);

} ;

DT::DT(const DT &d)

{

Trang 7

this->n = d.n;

this->a = new double[d.n+1];

for (int i=0;i<=d.n;++i) this->a[i] = d.a[i];

} ostream& operator<< (ostream& os,const DT &d) {

os << " - Cac he so (tu ao): " ; for (int i=0 ; i<= d.n ; ++i)

os << d.a[i] <<" " ; return os;

} istream& operator>> (istream& is,DT &d) {

if (d.a!=NULL) delete d.a;

cout << " - Bac da thuc: " ; cin >> d.n;

d.a = new double[d.n+1];

cout << "Nhap cac he so da thuc:\n" ; for (int i=0 ; i<= d.n ; ++i)

{ cout << "He so bac " << i << " = " ;

is >> d.a[i] ; }

return is;

} void main() {

DT d;

clrscr();

cout <<"\nNhap da thuc d " ; cin >> d;

DT u(d);

cout << "\nDa thuc d " << d ; cout << "\nDa thuc u " << u ; cout <<"\nNhap da thuc d " ; cin >> d;

cout << "\nDa thuc d " << d ; cout << "\nDa thuc u " << u ; cout <<"\nNhap da thuc u " ; cin >> u;

174

Trang 8

cout << "\nDa thuc u " << u ; getch();

}

Ngày đăng: 25/10/2013, 04:20

TỪ KHÓA LIÊN QUAN

w