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



tải về 1.36 Mb.
trang23/28
Chuyển đổi dữ liệu21.12.2018
Kích1.36 Mb.
1   ...   20   21   22   23   24   25   26   27   28

Nghiêm cấm kế thừa


Bài 1.

Xây dựng một lớp học sinh bao gồm các thuộc tính: họ tên, điểm toán, điểm lí, phương thức nhập, hiện. Lớp học sinh được khai báo là lớp nghiêm cấm kế thừa. Sau đó xây dựng một lớp sinh viên kế thừa các thuộc tính và phương thức của lớp học sinh, ngoài ra lớp sinh viên còn có thêm thuộc tính điểm hoá. Hãy thực hiện chương trình trên và xem chương trình sẽ xảy ra điều gì?

a, Hướng dẫn:

Ta thấy lớp học sinh là lớp nghiêm cấm kế thừa vậy ta phải khai báo từ khoá Sealed trước từ khoá Class như sau:

sealed Class hocsinh

{

private string hoten;



private float dtoan, dli;

public void nhap()

public void hien()

}

class sinhvien:hocsinh



{

private float dhoa;

public void nhap()

public void hien()

}

b, Bài giải mẫu:



using System;

sealed class hocsinh

{

private string hoten;



private float dtoan,dli;

public void nhap()

{

Console.Write("Nhap ho ten hoc sinh: ");



hoten=Console.ReadLine();

Console.Write("Diem toan: ");

dtoan=float.Parse(Console.ReadLine());

Console.Write("Diem li: ");

dli=float.Parse(Console.ReadLine());

}

public void hien()

{

Console.WriteLine("Thong tin can hien thi");



Console.WriteLine("Ho ten :{0}",hoten );

Console.WriteLine("Diem toan: {0}",dtoan );

Console.WriteLine("Diem li: {0}",dli );

}

}



class sinhvien:hocsinh

{

private float dhoa;



public new void nhap()

{

base.nhap();

Console.Write("Nhap diem hoa:");

dhoa=float.Parse(Console.ReadLine());

}

public new void hien()

{

base.hien();

Console.WriteLine("Diem hoa: {0}",dhoa );

}

}



class tester

{

static void Main(string[] args)

{

sinhvien a = new sinhvien();



a.nhap();

a.hien();

Console.ReadLine();

}

}



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

Chương trình đưa ra dòng thông báo lỗi: “Cannot derive from sealed type hocsinh”

Kết luận: Lớp sinhvien không thể kế thừa các thuộc tính và phương thức từ lớp Sinh viên.Bởi vì lớp học sinh được bảo vệ cấm kế thừa bằng từ khoá Sealed.

    1. Tính đa hình.


Bài 1

Xây dựng một lớp hình, kế thừa lớp hình đó để tính diện tích cho các hình: Hình tròn, hình chữ nhật..

a, Hướng dẫn:

Bài toán này gồm có 3 đối tượng: class Hinh, class hinhtron, class hinhcn.

Ta thấy: hình chữ nhật, hình tròn… đều có chung một phương thức là tính diện tích. Nhưng cách tính diện tích của mỗi hình lại không giống nhau, mỗi một hình nó cách tính riêng. Một phương thức mà có nhiều thể hiện khác nhau được coi là phương thức đa hình. Như vậy phương thức tính diện tích được coi là phương thức đa hình.

Ta xây dựng một lớp cơ sở class Hình có phương thức tính diện tích, tức lớp class Hình chỉ xây dựng làm thế nào để tính diện tích. Cách thức tính như thế nào thì tuỳ thuộc vào hai lớp dẫn xuất class hinhtron và class hinhcn có thể kế thừa lại bằng cách ghi đè.

Các phương thức và thuộc tính của lớp class Hinh

class Hinh

{

//Phương thức tính diện tích được khai báo là phương thức đa hình



public virtual float getArea()

}


Các thuộc tính và phương thức của Class hinhtron

class hinhtron

{

private float r;



public hinhtron(float r)

public override float getArea() //Phương thức ghi đè

}

Các thuộc tính và phương thức của lớp Class hinhcn



class hinhcn

{

private float cd,cr;



public hinhcn(float cd,float cr)

public override float getArea() //phương thức ghi đè

}

b, Bài giải mẫu:



using System;

class hinh

{

public virtual double getArea()

{

return getArea();

}

}



class hinhtron:hinh

{

private float r;



public hinhtron(float r)

{

this.r=r;

}

public override double getArea()

{

return r*r*3.14;

}

}

class hinhcn:hinh



{

private float cd,cr;

public hinhcn(float cd,float cr)

{

this.cd =cd;



this.cr =cr;

}

public override double getArea()

{

return cd*cr;

}

}



class tester

{

static void Main(string[] args)

{

hinh H = new hinh();



hinhcn hcn = new hinhcn(2,3);

hinhtron ht = new hinhtron(3);

H = ht;

Console.WriteLine("Dien tich hinh tron= {0}", H.getArea());



H = hcn;

Console.WriteLine ("Dien tich hinh chu nhat= {0}", H.getArea());

Console.ReadLine();

}

}



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


Diện tích hình tròn = 28.26

Diện tích hình chữ nhật= 6

Kết luận: Khi kế thừa một phương thức đa hình ta phải ghi đè bằng từ khoá override. Bài toán trên người lập trình sử dụng phương thức thiết lập để lấy dữ liệu đầu vào. Bạn đọc có thể nâng cấp chương trình với các phương thức nhập, hiện để có thể tính toán với bất kì mọi dữ liệu nhập.

Bài 2:

Một cái chuồng gồm 10 cái lồng dùng để nhốt mèo hoặc chó (mỗi lồng chỉ nhốt nhiều nhất một con).Viết chương trình quản lí việc nhốt mèo hoặc chó trong các lồng.

a, Hướng dẫn:

Ta xây dựng các lớp mèo và chó dẫn xuất từ lớp động vật. Do vậy, khi cần quản lí thêm việc nhốt con gà chẳng hạn chỉ cần bổ sung vào chương trình lớp con gà mà chương trình vẫn hoạt động bình thường mà không cần phải sửa đổi.

Với bài toán này chúng ta sẽ xây dựng lớp động vật có tính đa hình sau đó kế thừa xây dựng lớp chó, mèo. Nếu bài toán này không xây dựng đa hình thì phải giải quyết như thế nào? Ta thấy lớp chó, mèo đều thuộc lớp động vật nhưng chúng không có đặc điểm gì giống nhau để có thể kế thừa cho nhau.Vì vậy chúng ta cần xây dựng một lớp chung cho hai loài này là lớp động vật.

Bài toán gồm có 3 đối tượng: class Dongvat, class cho, class meo

class Dongvat

{

private int vt;



private string ten;

public virtual void nhap(int v)

public virtual void hien()

}

class cho:Dongvat



{

public override void nhap(int v)

public override void hien()

}

class meo:Dongvat



{

public override void nhap(int v)

public override void hien()

}

b, Bài giải mẫu:



using System;

namespace chomeo

{

class Dongvat

{

private int vt;

private string ten;

public virtual void nhap(int v)

{

vt=v;



Console.WriteLine ("Vi tri cua chuong: {0}",vt);

Console.Write ("Nhap vao ten dong vat:");

ten=Console.ReadLine();

}

public virtual void hien()

{

Console.WriteLine("Vi tri cua chuong:{0}",vt);



Console.WriteLine("Ten dong vat:{0}",ten );

}

}



class cho:Dongvat

{

public override void nhap(int v)

{

Console.WriteLine("\nNhap thong tin cho con cho");



base.nhap(v);

}

public override void hien()

{

Console.WriteLine("Day la con cho");



base.hien();

}

}



class Meo:Dongvat

{

public override void nhap(int v)

{

Console.WriteLine("\nNhap thong tin cho con meo");



base.nhap(v);

}

public override void hien()

{

Console.WriteLine("Day la con meo");



base.hien();

}

}



class tester

{

static void Main(string[] args)

{

Dongvat[] ds = new Dongvat[20];



int i;

for (i = 0; i < ds.Length; ++i)

ds[i] = null;

ConsoleKeyInfo kt;

i=0;


do

{

Console.Write ("Chuong thu {0} ban nuoi cho(c)hay meo(m): ",i);



kt = Console.ReadKey();

switch (char.ToUpper(kt.KeyChar))

{

case 'C':

ds[i] = new cho();

ds[i].nhap(i);



break;

case 'M':

ds[i] = new Meo();

ds[i].nhap(i);

break;

}

i++;



}

while ((int)kt.KeyChar != 13 && i < 20);

int vt;


Console.Write("Nhap vao vi tri chuong can kiem tra");

vt = int.Parse(Console.ReadLine());



if (ds[vt] == null)

Console.WriteLine("Chuong nay khong nuoi con gi");



else

ds[vt].hien();

Console.ReadKey();

}

}



}

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




Chuồng thứ 0 bạn nuôi gì chó(c) hay mèo(m):c

Nhập thông tin cho chó

Vị trí của chuồng là: 0

Nhập vào tên động vật: Nic

Chuồng thứ 1 bạn nuôi gì chó(c)hay mèo(m): m

Nhập thông tin cho mèo

Vị trí chuồng là: 1

Nhập vào tên động vật: Mướp

Nhập vào vị trí chuồng cần kiểm tra: 1

Đây là con mèo

Vị trí chuồng là: 1

Tên động vật: Mướp








    1. Поделитесь с Вашими друзьями:
1   ...   20   21   22   23   24   25   26   27   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