Читайте также:
|
|
Разрабатываем цепочку наследуемых классов простейших геометрических фигур базовый, точка и круг.
В качестве базового возьмем класс, не имеющий полей и содержащий только виртуальную функцию вычисления площади и «чисто виртуальную функцию» печати.
Пример статического наследования – обычное создание объектов, присваивание полям данных (координатам точки или координатам центра круга и радиуса) некоторых случайных значений в диапазоне от 0 до 100 и печать этих значений.
Исходный код программы:
using System;
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 abstract class baseGeo
{
public virtual double ploc() {return 0;}
public abstract string printO();
}
public class tka: baseGeo
{
protected int x, y;
public string ss;
public tka()
{
Random rnd = new Random();
x = rnd.Next(100);
y = rnd.Next(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 = rnd.Next(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;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i;
double pl;
string s;
Random rnd = new Random(20);
x = rnd.Next(100);
y = rnd.Next(100);
//ra = rnd.Next(100);
// пример статического наследования методов
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);
kryg c = new kryg();
x = c.gettkax();
y = c.gettkay();
ra = c.getkrygr();
//c.setkryg(x, y, ra);
textBox1.AppendText(c.printO());
s = " Площадь объекта = " + c.ploc().ToString() + "\r\n";
textBox1.AppendText(s);
Invalidate();
}
private void Form1_Paint_1(object sender, PaintEventArgs e)
{
Pen myPen = new Pen(Color.Red, 2);
Graphics g = e.Graphics;
g.DrawEllipse(myPen, x, y, ra, ra);
}
}
}
Работа программы:
Рисунок 10.1 – Статическое наследование методов
В приведенном примере статического наследования методов присутствует механизм перекрытия методов, но связи между методами фактически определяются во время компиляции программы.
Дата добавления: 2015-02-16; просмотров: 83 | Поможем написать вашу работу | Нарушение авторских прав |