Абстрактные классы: определение, назначение, примеры использования.
Чистая виртуальная функция не имеет реализации, ее нельзя вызвать в программе, она служит лишь как основа для дальнейшего полиморфного переопределения в производном классе. Если в классе определена хотя бы одна чистая виртуальная функция, он становится абстрактным. Главное отличие абстрактных классов – на их основе невозможность создавать объекты, они могут служить только основой для наследования. Класс Shape по замыслу является абстрактным, поэтому его можно переопределить следующим образом:
class Shape
{ protected:
Point base;
int color;
public:
virtual void show()=0;
virtual void hide()=0;
void move(int xn,int yn)
{ hide()
base.x+=xn; base.y+=yn;
show();
} };
Интерфейс: назначение, синтаксис определения, примеры использования.
Интерфейс – это декларация той функциональности, которую должен обеспечивать реализующий интерфейс класс. Часто говорят, что интерфейс является контрактом, который должен исполнять класс, объявивший себя наследником класса и тем самым вызвавшийся этот контракт исполнять. Определяется интерфейс с помощью ключевого слова interface и содержит лишь набор абстрактных членов:
interface имя{
тип имя_метода1 (список_параметров);
…
тип имя_свойства{set; get;}
…
}
Как видно из примера, в определение интерфейса помещаются лишь прототипы методов и свойств. Тела методов и аксессоров свойств не могут быть определены в интерфейсе, они задаются лишь в классах, наследующих интерфейс.
В теле интерфейса не указываются модификаторы доступа к членам, нельзя использовать для методов интерфейса ключевые слова virtual и static.
Например, определим интерфейс, отвечающий за проверку корректности заполнения данных различного типа – телефонных номеров, адресов e-mail, дат и других типов данных, поступающих от при регистрации пользователей, заполнении анкет и т.п.
public interface ICheckExp
{
bool checkPhone(string phoneNumb);
bool checkEmail(string emailStr);
bool checkDate(string dateStr);
}
В интерфейс включены три метода, осуществляющие проверку корректности переданных им строк, содержащих, соответственно, номер телефона, адреса электронной почты и даты. Теперь классы, реализующие подобную проверку (например, анкета или web-форма регистрации пользователей), наследуя этот интерфейс возьмут на себя обязательства определить конкретные реализации этих методов.