
- •Лабораторная работа №1 знакомство со средой визуального программирования ms visual studio
- •2. Домашнее задание и методические указания по его выполнению
- •2.1. Обзор Microsoft Visual Studio 2005
- •2.2. Создание простого приложения в ms Visual Studio
- •2.2. Отладка программы
- •2.3. Пошаговый режим
- •3. Лабораторное задание и методические указания по его выполнению
- •4. Контрольные вопросы
- •Лабораторная работа №2 управляющие операторы
- •2. Домашнее задание и методические указания по его выполнению
- •2.1. Условные операторы
- •2.1.1 Оператор if
- •2.1.2 Оператор switch
- •2.2 Операторы перехода
- •2.2.1 Операторы break и continue
- •2.2.2 Оператор return
- •2.3 Операторы цикла
- •2.3.1 Оператор for
- •2.3.2 Цикл while
- •2.3.3 Цикл do-while
- •3. Лабораторное задание и методические указания по его выполнению
- •4. Контрольные вопросы
- •5. Варианты заданий
- •Лабораторная работа №3 классы. Наследование. Полиморфизм. Интерфейсы.
- •2. Домашнее задание и методические указания по его выполнению
- •2.1 Основные понятия объектно-ориентированного программирования
- •2.2. Класса. Организация классов.
- •2.2.1. Поля и методы
- •2.2.2. Объявление объектов класса. Инициализация членов класса.
- •2.2.3. Конструкторы и деструкторы.
- •2.2.4. Пример работы с классами
- •2.3. Наследование
- •2.4. Полиморфизм.
- •2.4.1. Абстрактные классы.
- •2.5. Интерфейсы.
- •2.5. Реализация интерфейсов
- •3. Лабораторное задание и методические указания по его выполнению
- •4. Варианты заданий
- •Библиографический список
2.2.4. Пример работы с классами
using System;
class Vehicle
{
private int passengers;//количество мест для пассажиров
private string mark; //марка
private string model; //модель
private int fuelcap; //объем двигателя
//конструктор
public Vehicle (int Pass, int Mark, int Model, int fuelCap)
{
passengers = Pass;
mark = Mark;
model = Model;
fuelcap = fuelCap;
}
//метод для изменения значений полей
public void setVehicle(int Pass, int Mark, int Model, int fuelCap)
{
passengers = Pass;
mark = Mark;
model = Model;
fuelcap = fuelCap;
}
//метод для получения значений полей
public void getVehicle()
{
return “Марка: “+mark+” Модель: ”+model+” Объем двигателя: “+fuelcap+” Количество мест для пассажиров: “+passangers;
}
}
class vehicleDemo {
public static void main()
{
Vehicle vehicle1 = new Vehicle(4,”Lada”,”Kalina”,2);
Console.WriteLine(vehicle1.getVehicle());
vehicle1.setVehicle(4,”Lada”,”2110”,2);
Console.WriteLine(vehicle1.getVehicle());
}
}
Здесь объявляется класс Vehicle, описывающий автомобиль, полями которого яляются марка, модель, объем двигателя и число мест для пассажиров. Также есть два метода setVehicle() и getVehicle(), позволяющие изменить эти поля и получить текущие значения полей соответственно. В программе создается объект vehicle1 типа Vehicle с помощью конструктора Vehicle().
2.3. Наследование
В языке С# класс, который наследуется, называется базовым. Класс, который наследует базовый класс, называется производным. Следовательно, производный класс — это специализированная версия базового класса. В производный класс, наследующий все переменные, методы, свойства, операторы и индексаторы, определенные в базовом классе, могут быть добавлены уникальные элементы.
С# поддерживает наследование, позволяя в объявление класса встраивать другой класс. Это реализуется посредством задания базового класса при объявлении производного.
Общая форма объявления класса, который наследует базовый класс, имеет такой вид:
class <имя_производ_класса> : <имя_базового_класса>
{
// тело класса
}
Рассмотрим класс TwoDShape, в котором определяются атрибуты "обобщенной" двумерной геометрической фигуры {например, квадрата, прямоугольника, треугольника и т.д.).
// Класс двумерных объектов
class TwoDShape
{
public double width;
public double height;
public void showDim()
{
Console.WriteLine("Ширина и высота равны " + width + " и " + height);
}
}
Класс TwoDShape можно использовать в качестве базового (т.е. как стартовую площадку) для классов, которые описывают специфические типы двумерных объектов. Например, в следующей программе класс TwoDShape используется для выведения класса Triangle.
// Простая иерархия классов.
using System;
// Класс двумерных объектов.
class TwoDShape {
public double width;
public double height;
public void showDim()
{
Console.WriteLine("Ширина и высота равны " + width + " и " + height);
}
}
// Класс Triangle выводится из класса TwoDShape
class Triangle : TwoDShape
{
public string style; // Тип треугольника.
// Метод возвращает площадь треугольника,
public double area()
{
return width * height / 2;
}
// Отображаем тип треугольника,
public void showStyle()
{
Console.WriteLine("Треугольник " + style);
}
}
class Shapes {
public static void Main()
{
Triangle tl = new Triangle();
Triangle t2 = new Triangle();
tl.width = 4.0;
tl.height = 4.0;
tl.style = "равнобедренный";
t2.width = 8.0;
t2.height = 12.0;
t2.style = "прямоугольный";
Console.WriteLine("Информация о tl: ");
tl.showStyle() ; tl.showDim();
Console.WriteLine("Площадь равна " + tl.area()); Console.WriteLine();
Console.WriteLine("Информация о t2: "); t2.showStyle() ; t2.showDim();
Console.WriteLine("Площадь равна " + t2.area());
}
}
Вот результаты работы этой программы.
Информация о t1: Треугольник равнобедренный Ширина и высота равны 4 и 4 Площадь равна 8
Информация о t2: Треугольник прямоугольный Ширина и высота равны 8 и 12 Площадь равна 48
В классе Triangle создается специфический тип объекта класса TwoDShape, в данном случае треугольник. Класс Triangle содержит все элементы класса TwoDShape и, кроме того, поле style, метод area() и метод showStyle(). В переменной style хранится описание типа треугольника, метод area о вычисляет и возвращает его площадь, а метод showStyle() отображает данные о типе треугольника.
Несмотря на то что класс TwoDShape является базовым для класса Triangle, это совершенно независимый и автономный класс. То, что его использует в качестве базового производный класс (классы), не означает невозможность использования его самого. Безусловно, объект класса TwoDShape "ничего не знает" и не имеет права доступа К классу, производному от TwoDShape.
Для создаваемого производного класса можно указать только один базовый класс. В С# (в отличие от С++) не поддерживается наследование нескольких базовых классов в одном производном классе. Однако можно создать иерархию наследования, в которой один производный класс становится базовым для другого производного класса. И конечно же, ни один класс не может быть базовым (ни прямо, ни косвенно) для самого себя.