Пример динамического наследования методов

 

В качестве примера динамического наследования методов используем ту же цепочку наследуемых классов, но, во время работы программы, поместим 5 созданных объектов в стек.

Исходный код программы:

using System;

using System.Collections;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public int x, y, ra;

public int[,] masi = new int[6,3];

public Stack vstek = new Stack();

public abstract class baseGeo

{

public virtual double ploc() { return 0; }

public abstract string printO();

}

public class tka : baseGeo

{

protected int x, y;

public tka()

{

Random rnd = new Random();

x = (int)Math.Round(rnd.NextDouble() * 100);

y = (int)Math.Round(rnd.NextDouble() * 100);

}

public int gettkax() { return x; }

public int gettkay() { return y; }

public void settka(int xx, int yy)

{

x = xx;

y = yy;

}

override public string printO()

{

return "Точка [" + x.ToString() + "," + y.ToString() + "]";

}

}

public class kryg : tka

{

public kryg()

{

Random rnd = new Random(10);

r = (int)Math.Round(rnd.NextDouble() * 100);

}

public void setkryg(int ax, int ay, int rr)

{

settka(ax, ay);

r = rr;

}

public void getkryg(out int ax, out int ay, out int rr)

{

ax = x;

ay = y;

rr = r;

}

public int getkrygr() { return r; }

override public double ploc() // перекрываем метод

// базового класса

{

return 3.14 * r * r;

}

override public string printO() // перекрываем метод

// класса tka

{

string ss = "";

ss = "Круг с центром: " + base.printO() + "\r\n";

// наследуется функция печати класса tka

ss = ss + " Радиусом = " + r.ToString() + "\r\n";

return ss;

}

private int r;

}

static void vkl(Stack vst, baseGeo n)

{

vst.Push(n);

}

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

int i,k;

double pl;

string s;

Stack vstek = new Stack();

Random rnd = new Random(20);

// пример динамического наследования методов

for (i = 1; i <= 5; i++)

{

x = (int)Math.Round(rnd.NextDouble() * 100);

y = (int)Math.Round(rnd.NextDouble() * 100);

k = (int)Math.Round(rnd.NextDouble() * 100);

if (k % 2 == 0) k = 0; else k = 1;

if (k == 0)

{

tka a = new tka();

a.settka(x, y);

s = a.printO() + "\r\n";

textBox1.AppendText(s);

s = " Площадь объекта = " + a.ploc().ToString() + "\r\n";

textBox1.AppendText(s);

masi[i, 0] = a.gettkax();

masi[i, 1] = a.gettkay();

masi[i, 2] = 0;

vkl(vstek, a);

}

else

{

kryg c = new kryg();

x = c.gettkax();

y = c.gettkay();

ra = c.getkrygr();

textBox1.AppendText(c.printO());

s = " Площадь объекта = " + c.ploc().ToString() + "\r\n";

textBox1.AppendText(s);

c.getkryg(out masi[i,0], out masi[i,1], out masi[i,2]);

vkl(vstek, c);

}

}

s = "Печать содержимого стека: \r\n";

foreach (baseGeo T in vstek)

s = s + T.printO() + "\r\n";

textBox1.AppendText(s);

Invalidate();

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

Pen myPen = new Pen(Color.Red, 2);

Graphics g = e.Graphics;

for (int i = 1; i <= 5; i++)

{

if (masi[i,2]==0)

{

x = masi[i, 0]; y = masi[i, 1];

g.DrawEllipse(myPen, x, y, 2, 2);

}

else

{

x = masi[i, 0]; y = masi[i, 1]; ra = masi[i, 2];

g.DrawEllipse(myPen, x, y, ra, ra);

}

}

}

}

}

 

Работа программы:

 

 

 

Рисунок 10.2 – Динамическое наследование методов

 

Печать содержимого элементов стека является примером полиморфизма (динамического наследования методов). Действительно, «статически» печать элемента стека рассчитана на печать элемента простейшей геометрической фигуры. Но в процессе работы программы (в этом суть динамического наследования методов) в стек помещаются объекты классов точка и круг.

 








Дата добавления: 2018-11-25; просмотров: 317;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.