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



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

Lớp trừu tượng


Bài 1.

Ta thấy lớp chó mèo được xây dựng ở bài 2 kế thừa lớp động vật có các phương thức mang tính đa hình. Để bạn đọc có thể phân biệt được giữa phương thức đa hình với phương thức trừu tượng, chúng ta xây dựng lại bài toán trên theo kiểu lớp trừu tượng

a, Hướng dẫn:

Ta thấy khi quản lí việc nhốt chó mèo, ta có một mảng các chuồng. Và các chuồng đó được dùng để nhốt động vật, và chúng ta không quan tâm xem chuồng nhốt con vật gì. Việc nhốt con vật gì là do mỗi chuồng. Bài toán đặt ra là quản lí chó mèo, từ 2 loài này ta thấy chúng đều có chung một nguồn gốc là động vật. Động vật mang tính chất chung, không thể hiện rõ là con vật gì. Vì thế ta xây dựng lớp động vật là lớp cơ sở trừu tượng của hai con vật trên.

Các thuộc tính và phương thức của đối tượng chó, mèo xây dựng giống bài 2 phần tính đa hình.Nhưng chỉ khác ở lớp động vật:

public abstract class Dongvat

{

protected int vt;



protected string ten;

public abstract void nhap(int v);

public abstract void hien();

}

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



using System;

using System.Collections.Generic;

using System.Text;

namespace truu_tuong

{

public abstract class Dongvat

{

protected int vt;

protected string ten;

public abstract void nhap(int v);

public abstract void hien();

}

class cho:Dongvat

{

public override void nhap(int v)

{

vt=v;



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

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

Console.Write("Nhap ten cua con cho:");

ten=Console.ReadLine();

}

public override void hien()

{

Console.WriteLine("Day la chuong nuoi cho");



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

Console.WriteLine("Ten cua con cho :{0}",ten );

}

}

class meo:Dongvat



{

public override void nhap(int v)

{

vt=v;



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

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

Console.Write("Nhap ten cua con meo:");

ten=Console.ReadLine();

}

public override void hien()

{

Console.WriteLine("Day la chuong nuoi meo");



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

Console.WriteLine("Ten cua con meo :{0}",ten );

}

}

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:

Giống bài trên

    1. Xây dựng lớp lồng nhau


Bài 1.

Xây dựng lớp hình chữ nhật với các thuộc tính và phương thức cần thiết. Sau đó xây dựng lớp hình hộp bên trong lớp hình chữ nhật và tính thể tích cho hình hộp đó.

a, Hướng dẫn:

Khi giải quyết một bài toán bạn mong muốn một lớp dẫn xuất có thể truy xuất đến các thành phần thuộc tính của lớp cơ sở. Thông thường bạn sẽ kế thừa bằng cách khai báo thuộc tính của lớp cơ sở là protected. Nhưng bài toán này bạn không cần phải làm điều đó mà vẫn truy nhập được thuộc tính Private của lớp cơ sở. Chúng ta sẽ xây dựng một lớp cơ sở, thay vì xây dựng lớp dẫn xuất ta sẽ xây dựng một lớp lồng bên trong của lớp cơ sở trên. Và lớp này cũng sẽ trở thành một đối tượng thành phần của lớp ngoài.

Bài toán gồm có 2 đối tượng class hinhcn, class hinhhop

Cấu trúc xây dựng lớp lồng của bài toán này như sau:



class hinhcn

{

private int cdai, crong;



public hinhcn()

public hinhcn(int cd, int cr)

public void nhap()

public int dientich()

Public void hien()

internal class hinhhop

{

private int cao;



public hinhhop()

public hinhhop(int cd, int cr, int c)

public void nhap(hinhcn f)

public int thetich(hinhcn f)

public void hien(hinhcn f)

}

}



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


using System;

namespace loplong

{

class hinhcn

{

private int cdai,crong;

public hinhcn()

{

cdai=5;



crong=3;

}

public hinhcn(int cd, int cr)

{

cdai = cd;



crong = cr;

}

public void nhap()

{

Console.Write("nhap chieu dai:");



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

Console.Write("Nhap chieu rong:");

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

}

public int dientich()

{

return cdai*crong ;

}

public void hien()

{

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



Console.WriteLine("Chieu dai={0}",cdai );

Console.WriteLine("Chieu rong={0}",crong);

Console.WriteLine("Dien tich hinh cn ={0}",dientich());

}

internal class hinhhop

{

int cao;


public hinhhop()

{

cao=4;



}

public hinhhop(int cd,int cr,int c)

{

cao = c;



}

public int thetich(hinhcn f)

{

return f.dientich()*cao;

}

public void nhap(hinhcn f)

{

f.nhap();



Console.Write("Nhap chieu cao=");

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

}

public void hien(hinhcn f)

{

f.hien();



Console.WriteLine("The tich hinh hop:{0}", thetich(f));

}

}



}

class tester

{

static void Main(string[] args)

{

hinhcn f = new hinhcn();



hinhcn.hinhhop A = new hinhcn.hinhhop();

A.nhap(f);

A.hien(f);

Console.ReadLine();

}

}

}



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



Nhập chiều dài: 10

Nhập chiều rộng: 7

Nhập chiều cao: 5

Thông tin hiển thị

Chiều dài = 10

Chiều rộng =7

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

Thể tích hình hộp =350




Kết luận

Việc xây dựng lớp lồng có ưu điểm là có thể truy xuất các thành viên private của lớp ngoài.Tuy nhiên nếu có nhiều lớp được xây dựng lồng nhau thì chương trình rất rối, bạn đọc sẽ khó hiểu hơn.Bài toán này chỉ lên xây dựng khi có ít lớp, nếu bài toán có nhiều lớp thì chúng ta lên xây dựng một lớp cơ sở sau đó kế thừa để xây dựng các lớp khác. Khi xây dựng lớp lồng bên trong cần chú ý khai báo từ khoá Internal trước từ khoá Class.





  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