Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тельнов по билетам.docx
Скачиваний:
5
Добавлен:
07.04.2023
Размер:
3.61 Mб
Скачать

3)Полиморфный контейнер(пример).

Пример полиморфного Контейнера

Cstr

CColymorph

Cint

Cpoint

#include <list>

#Include <iostream>

Using namespace std;

class CPolymorph;//абстрактный класс

{

Public:

Virtual CPolymorph& get()=0;//Чистая виртуальная функция;

};

Class CStr : public CPolymorph

{

Char *S

Public:

CStr(char* s =”xyz”){S = new char[strlen(s)+1];strcpy(S,s);}

Cstr& get(){cout << “Object Cstr: ”<< S << endl; return *this;}

};

Class CPoint: public CPolymorph

{

Int X,Y;

Public:

CPoint(int x = 0, int y = 0){X = x; Y = y;}

CPoint& get(){cout << “Object CPoint: ” << “X = ”<<X<<”Y = ”<<Y<<endl; return *this;} }

Int main()

{ Cint n; Cstr m; CPoint k;

List<CPolimorph*> c;

c.pushfront(&n);

c.pushfront(&m);

c.pushfront(&k);

for(list<CPolymorph>::iterator it = c.begin(); it != c.end(); ++c) *c->get(); return 0;}

VIII билет)

1)Язык Си: структуры. Пример.

Формат: struct <Имя - структуры> {<список- полей>};

struct <Имя - структуры> {<описатели- переменных>};

struct [<Имя - структуры>] {<список- полей>} <описатели-переменных>;

Аналоги структур в реальной жизни – различные формуляры, анкеты, учетные карточки.

Существует два способа доступа к полям структурных переменных:

<Имя – структурной-переменной> . <имя-поля>

<указатель-на-структурную-переменную> -> <имя - поля>

ПРИМЕР: электронная картотека для домашней библиотеки

Struct {

Char * ptitle; //наименование книги

Char * pauthor; //автор

Float price; //стоимость Struct form books [1024]; //картотека есть массив структур

Struct form* pbook = books; //указатель на массив структур

2)Управление доступом к элементам классов. Пример.

Управление доступом к элементам классов по существу позволяет управлять степенью инкапсуляции в классе. Сокрытие данных и методов защищает объекты от несанкционированного доступа и от непреднамеренной порчи.

Рассмотрим значения следующих ключевых слов:

Private - элементы класса доступны методам этого класса и дружественным функциям. Private есть значение по умолчанию.

Protected - элементы класса доступны методам этого класса, методам

производных от него классов и дружественным функциям.

Public - элементы класса доступны любым функциям текущего проекта.

Friend - открывает доступ к элементам класса для функций, не являющихся

методами данного класса (т.e. объявляет дружественные функции), а также

используется для объявления дружественных классов.

class CPoint { // это пример сокрытия данных

protected:

int Х, Y; // координаты точки

public:

CPoint ( int a, int b ) { X = a; Y = b; } // конструктор объекта

int GetX( ) {return X; } // получить координату Х

int GetY( ) {return Y; } // получить координату Y

};

void main ( void ) { CPoint point ( 10, 20 ); }

Каким образом регулируются права доступа к элементам классов при наследовании классов? Рассмотрим следующую синтаксическую конструкцию:

class Derived: <модификатор-доступа> Base { ...... };

Здесь Base - базовый класс (предок), а Derived - производный класс (потомок).

См. след стр.

Таблица определения прав доступа при наследовании

Base

<модификатор-доступа>

Derived

private

private

не доступны

protected

private

private

public

private

private

private

public

не доступны

protected

public

protected

public

public

public