Mục lục chương I: ĐỐi tưỢng và LỚP


Hàm thiết lập và hàm thiết lập sao chép, hàm sao chép cho lớp vector



tải về 1.36 Mb.
trang8/28
Chuyển đổi dữ liệu21.12.2018
Kích1.36 Mb.
1   ...   4   5   6   7   8   9   10   11   ...   28

Hàm thiết lập và hàm thiết lập sao chép, hàm sao chép cho lớp vector


Xây dựng một lớp vector đơn giản có sử dụng các hàm thiết lập không tham số, một tham số và hai tham số.Trong lớp có sử dụng hàm thiết lập sao chép, hàm sao chép cho đối tượng của lớp (phân biệt hai cách dùng của constructor)

a, Hướng dẫn:

Vì vecto là một đối tượng mà các thành phần dữ liệu không tĩnh nên phải khai báo vùng nhớ dùng để chứa các tọa độ là một mảng một chiều: float[] v

Đối với các hàm thiết lập không tham số và một tham số thì không có gì đáng ngại cả. Chỉ có hàm thiết lập hai tham số thì cần chú ý một chút: Trong hàm thiết lập hai tham số thì một tham số là số chiều của vecto còn tham số còn lại là một mảng một chiều mà ta sẽ đọc các phần tử của mảng vào cho vecto nên phương thức này được khai báo như sau:public vecto(int size, float[] u) trong đó float [] u chính là mảng có chứa sẵn các phần tử.

Với hàm thiết lập sao chép thì chính là việc sao chép lại giá trị của các thành phần dữ liệu đã có trong một đối tượng cùng lớp vecto và đưa vào vùng nhớ của vecto đã được cấp phát bộ nhớ.

public vecto(int size, float[] u)

{

int i; n = size;



v = new float[n];

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

{

v[i] = u[i];



}

}

b, Chương trình mẫu:




using System;

namespace vidu7

{

class Vecto

{

int n = 20;

float[] v;

public vecto()

{

int i;

Console.WriteLine("\t Su dung ham thiet lap khong tham so:");

Console.Write("\t So chieu cua vecto la:");

i = Convert.ToInt32(Console.ReadLine());

n = i;


v = new float[n];

Console.WriteLine("\t nhap thong so cho vecto:");



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

{

Console.Write("\t toa do thu {0}:", i);



Console.Write("\t v[{0}]=", i + 1);

v[i] = int.Parse(Console.ReadLine());

}

}

public vecto(int size)



{

int i;

Console.WriteLine("\t Su dung ham thiet lap mot tham so:");

n = size;

v = new float[n];

Console.WriteLine("\t nhap thong so cho vecto:");

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

{

Console.Write("\t toa do thu {0}:", i);



Console.Write("\t v[{0}]=", i + 1);

v[i] = int.Parse(Console.ReadLine());

}

}

public vecto(int size, float[] u)



{

int i;

Console.WriteLine("\t Su dung ham thiet lap hai tham so:");

n = size;

v = new float[n];

Console.WriteLine("\t tao mot vecto tu mot mang mot chieu:");

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

{

v[i] = u[i];



}

}

public vecto(vecto u)

{

int i;

Console.WriteLine("\t su dung ham thiet lap sao chep:");

// xin cap phat vung nho co kich thuoc bang voi doi tuong cu

v = new float[n = u.n];

// thuc hien gan cac vung nho dong cua doi tuong cu sang doi tuong moi

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

{

v[i] = u.v[i];



}

}

public void saochep(vecto b)

{

n = b.n;


Console.WriteLine("\t Su dung ham sao chep");

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

{

this.v[i] = b.v[i];

}

}

public void hien()



{

Console.Write(\t "(");



for (int i = 0; i < v.Length; i++)

if (i == v.Length - 1)

Console.Write("{0}", v[i]);



else

Console.Write("{0},", v[i]);

Console.WriteLine(")");

}

class tester

{

static void Main(string[] args)

{

vecto v1 = new vecto();



Console.Write("\t v1:");v1.hien();

vecto v2 = new vecto(4);

Console.Write("\t v2:");v2.hien();

float[] a ={ 12, 8, 11, 3, 20 , 85 };

vecto v3 = new vecto(4, a);

Console.Write("\t v3:"); v3.hien();

vecto v4 = new vecto(v3);

Console.Write("\t v4:"); v4.hien();

if (v3.n==v2.n)

v3.saochep(v2);



else

{

Console.WriteLine("\t khong tien hanh sao chep. Gia tri vecto van la:");



}

Console.Write("\t v3:"); v3.hien();

Console.ReadLine();

}

}



}

}


Kết quả sau khi chạy chương trình:


Su dung ham thiet lap khong tham so:

So chieu cua vecto la: 2

Nhap thong so cho vecto:

v[1]=10





v[2]=89

v1: (10,89)

Su dung ham thiet lap một tham so:

Nhap thong so cho vecto:

v[1]=4

v[2]=5


v[3]=1

v[4]=23


v2: (4,5,1,23)

Su dung ham thiet lap hai tham so:

tao mot vecto tu mot mang mot chieu:

v3: (12,8,11,3)

su dung ham thiet lap sao chep:

v4: (12,8,11,3)

su dung ham sao chep:

v3: (4,5,11,23)





    1. Sử dụng hàm thiết lập sao chép và hàm hủy bỏ


Xây dựng lớp thoigian lấy về thời gian hiện hành. Có sử dụng phương thức khởi tạo, phương thức sao chép và phương thức hủy bỏ.

a, Hướng dẫn:

Để lấy được thời gian hiện hành thì ta sử dụng hàm now.

Các thuộc tính của lớp gồm ngày, tháng, năm, giờ, phút, giây được lấy theo thời gian hệ thống thông qua hàm System.DateTime.Now

Các phương thức của lớp gồm:


  • public dipslay() dùng để hiển thị thông tin

  • public ThoiGian (System.DateTime tg): thiết lập sao chép thời gian từ một đối tượng đã có

  • public ThoiGian( int Date,int Month,int Year,int Hour, int Minute,int Second): PT thiết lập 6 tham số khởi tạo giá trị cho biến đối tựơng.

  • public ThoiGian(int Date,int Year,int Hour,int Second): PT thiết lập 4 tham số khởi tạo giá trị cho biến đối tượng.

  • public void saochep(ThoiGian TG) dùng để sao chép đối tượng.

  • ~ ThoiGian(): là phương thức hủy bỏ đối tựơng của lớp.Phương thức này sẽ được gọi tự động bởi trình thu gom rác của C#

b, Bài giải mẫu

using System;

namespace saochep

{

public class ThoiGian

{

private int Nam ;

private int Thang = 7;

private int Ngay = 30;

private int Gio = 5;

private int Phut = 19;

private int Giay = 23;

System.DateTime now = System.DateTime.Now;



public void dipslay()

{

System.Console.WriteLine("\t Ngay:{0}/{1}/{2}", Ngay, Thang, Nam);



System.Console.WriteLine("\t Gio:{0}:{1}:{2}", Gio, Phut, Giay);

}

public ThoiGian( System.DateTime tg)

// hàm thiết lập sao chép

{

Nam = tg.Year;



Thang = tg.Month;

Ngay = tg.Day;

Gio = tg.Hour;

Phut = tg.Minute;

Giay = tg.Second;

}

public void saochep(ThoiGian TG)

{

this.Gio=TG.Gio;

this.Phut=TG.Phut;

this.Giay=TG.Giay;

this.Ngay = TG.Ngay;

this.Thang = TG.Thang;

this.Nam = TG.Nam;

}

public ThoiGian( int Date,int Month,int Year,int Hour, int Minute,int Second)

// ham thiet lap 6 tham so

{

Nam = Year;



Thang = Month;

Ngay = Date;

Gio = Hour;

Phut = Minute;

Giay = Second;

}

public ThoiGian(int Date, int Year, int Hour, int Second)

{

Nam = Year;



Ngay = Date;

Gio = Hour;

Giay = Second;

}

~ThoiGian()



{

Console.WriteLine("\t\t doi tuong da duoc huy");

GC.SuppressFinalize(this);

Console.ReadKey();

}

}

public class Tester



{

static void Main()

{

System.DateTime currentTime = System.DateTime.Now;



Console.WriteLine("\t Thoi gian hien hanh la:\t\t");

ThoiGian tghh = new ThoiGian( currentTime );

tghh.dipslay();

Console.WriteLine("\t t1 khoi tao tu ham thiet lap sao chep:\t");

ThoiGian t1 =tghh;

t1.dipslay();

Console.WriteLine("\t t2 goi ham thiet lap 6 tham so:\t");

ThoiGian t2 = new ThoiGian(12,12,2007,4,56,39);

t2.dipslay();

Console.WriteLine("\t t1 sao chep tu doi tuong t2:\t\t");

t1.saochep(t2);

t1.dipslay();

Console.WriteLine("\t t3 goi tu ham thiet lap 4 tham so:\t");

ThoiGian t3 = new ThoiGian(15, 2008, 12, 40);

t3.dipslay();

Console.ReadKey();

}

}

}



Kết quả sau khi chạy chương trình:



Thoi gian hien hanh la:

Ngay: 8/6/2007

Gio: 2:29:26

T1 khoi tao tu ham thiet lap sao chep:

Ngay: 8/6/2007

Gio: 2:29:26

T2 goi tu ham thiet lap 6 tham so:

Ngay: 12/12/2007

Gio: 4:56:39

T1 sao chep tu doi tuong t2:

Ngay: 12/12/2007

Gio: 4:56:39

T3 goi tu ham thiet lap 4 tham so:

Ngay:15/7/2008

Gio: 12:0:40

doi tuong da duoc huy



Trong ví dụ trên, hàm hủy bỏ đối tượng bằng phương thức SuppressFinalize của đối tựợng GC (Garbage Collector). Dòng thông báo “doi tuong da duoc huy” xuất hiện ngay sau khi ta gõ một phím bất kì cho thấy phương thức hủy bỏ đã được goi tự đông trước khi kết thúc chương trình và giải phóng vùng nhớ cho các đối tượng. Trong phương thức thiết lập 4 tham số, các tham số không được khởi tạo sẽ lấy giá trị mặc định của biến hay giá trị khởi gán ban đầu nên có kết quả như trên.





    1. Поделитесь с Вашими друзьями:
1   ...   4   5   6   7   8   9   10   11   ...   28


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

    Quê hương