- •050655 İnformasiya texnologiyaları ixtisası üzrə
- •Vagif_salimov@yahoo.Com
- •1 Вопрос . * Основы алгоритмизации
- •Вопрос.* Базовые алгоритмы линейный, разветвляющийся
- •Вопрос. * Базовые алгоритмы- циклы
- •Цикл с параметром
- •4 Вопрос .* Примеры алгоритмов ( линейный, разветвляющийся)
- •9 Вопрос . Краткая история языка с
- •12. Вопрос **. Характеристика длины, диапазон и преобразования типов
- •13. Вопрос * Характеристика памяти
- •15. Вопрос * Структура c программы
- •16 Вопрос .** Типы операций
- •17 Вопрос .Операции с целыми числами
- •18. Арифметическое и (&).
- •21 Вопрос * Арифметичекое отриц.,сдвиг влево,сдвиг вправо
- •22 Вопрос * Логические операции и отношения
- •Операция ?
- •23 Вопрос * Приоритеты операций и стандарт. Математические функ.
- •24 Вопрос * Оператор присваивания
- •25 Вопрос ** Ввод данных с помощью функции scanf
- •26 Вопрос ** Вывод данных в помощью функции printf
- •Примеры вывода
- •27 Вопрос * Ввод с помощью cin и вывод с помощью cout
- •28 Вопрос * Форматный вывод в Cout
- •Пример линейной программы
- •29 Вопрос ** Оператор İf и goto
- •30 Вопрос ** Оператор Switch/case
- •31 Вопрос * Оператор цикла For
- •32 Вопрос * Оператор цикла while
- •33 Вопрос * Оператор цикла do while
- •34 Вопрос ** Массивы . Общие сведения
- •35 Вопрос *** Ввод , вывод и обработка массивов
- •36 Вопрос *** Указатели
- •37 Вопрос ** Строки
- •38 Вопрос . *** Функции для работы со строками
- •39 Вопрос ** Перечислительный тип
- •40 Вопрос *** Файлы
- •Коды режимов приводяться ниже :
- •41 Вопрос . *** Функции. Общие сведения
- •42 Вопрос *** Обмен данных с функцией
- •43 Вопрос *** Передача массивов в функцию
- •44 Вопрос *** Передача данных с помощью глобальных переменных
- •45 Вопрос ***Структуры
- •46 Вопрос ** . Обьектно-ориентированное программирование. Общие сведения
- •47 * Основные понятия ооп
- •48*** Вопрос . Объявление класса:
- •49 *** Вопрос . Пример простейшего класса
- •50. Вопрос . Конструкторы и деструкторы
- •51. Вопрос . Наследование
- •Уровни доступа к членам класса
- •Void student::message()
- •Int main(void)
- •Void message();
- •Void person::message()
- •52. Вопрос . Полиморфизм
- •53. Вопрос . Визуальное (Windows Form) программирование
- •54. Вопрос . Работа с визуальными элементами
- •Функции преобразования типов
- •4.ComboBox
Void message();
};
person :: person()
{
strcpy(name, "Noname");
}
Void person::message()
{
cout << "My name is " << name << endl;
}
Таким образом, в класс-наследник student теперь включены два метода message, имеющие одинаковый тип и одинаковый список параметров – один из базового класса, другой – собственный. Собственный метод доступен через имя объекта. Однако можно получить доступ к унаследованному методу, если использовать для доступа к методу указатель соответствующего типа – указатель на базовый класс:
int main(void)
{
person A;
student B("Ann", "SS,SK,VT");
A.message();
B.message();
person* pperson = &B;
pperson->message();
student* pstudent = &B;
pstudent->message();
return 0;
}
На экране увидим сообщения:
Noname Сообщение об= объекте A
Ann SS,SK,VT Сообщение об объекте B (используется
собственный метод message)
Ann Сообщение об объекте B (используется
метод message, полученный по наследству)
Ann SS,SK,VT Сообщение об объекте B (используется
собственный метод message)
В С++ можно избежать получения по наследству метода, если метод с таким же именем включен в класс-потомок, для этого используется механизм виртуальных функций.
Виртуальная функция - это функция, объявленная в базовом классе с помощью ключевого слова virtual, такая функция в классах-потомках замещается на функцию, принадлежащую производному классу и имеющую то же имя:
class person
{
protected:
char name[20];
public:
person();
virtual void message();
};
Теперь результатом выполнения программы будут следующие сообщения:
Noname Сообщение об объекте A
Ann SS,SK,VT Сообщение об объекте B (используется
собственный метод message)
Ann SS,SK,VT Сообщение об объекте B (используется
собственный метод message)
Ann SS,SK,VT Сообщение об объекте B (используется
собственный метод message)
С помощью виртуальных функций можно создать класс-наследник, имеющий тот же интерфейс, что и базовый класс, но обладающий своей собственной моделью поведения. Механизм виртуальных функций реализуется следующим образом: обычно обработка вызовов функций выполняется на этапе компиляции и завершается на этапе редактирования связей, когда вызов метода жестко связывается с соответствующей функцией (раннее связывание); если метод объявлен как виртуальный, выполняется так называемое позднее связывание, т. е. связывание вызова и функции во время выполнения программы.
52. Вопрос . Полиморфизм
Полиморфизм – это принцип ООП, позволяющий включать в состав класса несколько функций с одинаковыми именами, но выполняющих различные действия. Такие функции должны иметь различные списки параметров, они должны отличаться или количеством параметров в списках, или типами соответствующих параметров. Полиморфизм в ООП есть проявление свойства языка C++, называемого перегрузкой функций .
Пример полиморфизма – класс графических примитивов Draw. Класс может проявить себя как текст, прямоугольник или окружность. Для этого в класс включены три метода show(), различающиеся параметрами.
Компилятор, обрабатывая вызов функции, сопоставляет список фактических параметров со списками формальных параметров всех методов класса, имеющих то же имя, и выбирает ту функцию, у которой список формальных параметров совпал со списком фактических параметров при вызове функции:
#include <string.h>
#include <iostream.h>
class Draw
{
int x1, y1, x2, y2, r;
char *message;
public:
Draw();
virtual ~Draw();
void show();
void show(int xx1, int yy1, int xx2, int yy2);
void show(int xx1, int xx2, int rr);
};
Draw::Draw() // конструктор
{
x1=x2=y2=y1=r=0;
message=new char[10];
strcpy(message, "text");
}
Draw::~Draw() // деструктор
{
delete[] message;
message=NULL;
}
void Draw::show() // обработчик
{
cout << message << endl;
}
void Draw::show(int xx1,int yy1,int xx2,int yy2)
{
cout << "Rectangle" << endl;
}
void Draw::show(int xx1,int xx2,int rr)
{
cout << "Circle" << endl;
}
int main(void)
{
Draw draw;
draw.show();
draw.show(1,1,20,10);
draw.show(10,10,10);
return 0;
}
В результате выполнения программы на экране появляются сообщения:
Text
Rectangle
Circle
Другой пример
#include <iostream.h>
#include <math.h>
class farida {
public:
// illustrasiya polimorfizma
int a;
int b;
virtual int vag1(int s) { a=2*s+8;return(a);}
int vag2 (int s) { b=2*s*s+4*s;return(b);}
} ;
class aytan :public farida
{
public:
int a;
int b;
int vag1(int s,int q) { a=2*s+8+q;return(a);}
int vag1 (int s) { b=2*s*s+4*s;return(b);}
} ;
farida rr; farida t[5];
aytan * z=new aytan;
aytan * w=new aytan;
farida * x =new farida;
farida * y=new farida;
main ()
{ int d,c,g,h;
rr.a=55;cout<<rr.a; t[0].a=77;cout<<t[0].a;
c= x->vag2(1);d= x->vag1(2);x->a=1;g=z->vag1(1,2);cout<<g<<endl;
h=w->vag1(1);cout<<h<<endl;
c=x->a; cout<<c<<endl;
if (x->a==x->b )
cout<<x->vag1(2) ;
else
cout<<y->vag2(6);
delete x;delete y;
}
