Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
12
Добавлен:
24.09.2019
Размер:
187.39 Кб
Скачать
  1. Главные признаки объектно-ориентированного подхода (Alan Kay).

  1. В прогр. всё явл. объектом.

  2. Вычисления имеют вид взаимодействия объектов.

  3. Каждый объект имеет собств. область памяти.

  4. Каждый объект является представителем класса.

  5. Поведение объекта определяется классом.

  6. Классы образуют единую древовидную структуру с общим корнем, называемой иерархией наследования.

  1. Общеязыковые расширения C++: значения аргументов функции по умолчанию, комментарии, ссылки, встраиваемые (под­ставляемые) функции, операция разрешения области видимости.

- значения аргументов функции по умолчанию

void f(int a, double b=1.5);

int main(){ f(1,5.5);

f(-10); // = f(-10, 1.5);

Все аргументы расположенные справа от «по умолчанию» должны быть по умолчанию

- комментарии // строка , /* много строк */

- ccылки int x=2; int &r=x; int y=4; r=y; // x=4; ccылка – скрытый указатель.

- встраиваемые функции: inline f(); - попытка оптимизировать работу программы

- операция разрешения области видимости. int x=1; int main(){int x=2; printf(“%d”,x);}//::x

  1. Перегрузка функций. Меха­низм реализации перегрузки функций. Спецификация внешней связи.

В С++ можно одновременно задавать несколько функций с одним и тем же именем, если различаются списки их аргументов.

void f();

void f(int,double); Нельзя иметь фунции, отличающ. только типом возвр. знач.

void f(double,int);

Меха­низм реализации перегрузки функций: Компилятор искажает заданные нами имена, добавляя информацию о типах аргументов функции. Искажение не стандартизировано.

Спецификация внешней связи. Компилятор Си не искажает имя функции, а компилятор С++ искажает и ожидает другое имя. Конструкция, запрещающая С++ искажать имена exturn “C”{void f();} или #include “f.h”.

4) Специальные методы класса. Конструкторы. Деструктор. Конструктор копирования. Операция присваивания. Конст­рукторы преобразования и методы приведения типа. Операции new и delete для класса. Моди­фикатор const: неизменяемые поля класса. Список инициализации.

Специальные методы класса. – методы обеспеч. общее функцианирование любых классов.

Конструкторы – вызываются при создании нового обьекта. Задача – инициализация обьекта, т.е. дать нач. знач. для всех его полей. -Имя констр. совпадает с именем класса.

-Не задается тип возвр. значения. -М.б. перегружен. -Не наследуются –Не м.б. виртуальной функцией. class A{ public: int a; A(){a=0;}; A(int x){a=x;}}

E сли нет конструкт.-’’конструктор по умолчанию''

int main(){ A x, y(10);}

Деструкторы - вызывается перед уничтожением любого обьекта. При выходе обьекта из области видимости вызывается деструктор. ~ <имя класса>(){}; Для класса м.б. вызван только 1 деструктор. Если деструктор явно не созд. - его создает компилятор.

Конструктор копирования – вызывается если созданный обьект должен быть копией уже существующ. обьекта того же класса. –Конструктор с одним аргументом, ссылкой на обьект своего класса. class A{ int a; A(){a=0;}; A(A& x){a=x.a;};

Операция присваивания A operator = (A a2){ a1=a2; // = a1.operator=(a2);}

Конст­рукторы преобразования. – используется для того чтобы объект чужого класса превратить в объект нашего класса. К.п. – это констр. с 1им аргументом. Тип аргумента-чужой тип, который. преобраз. в объект нашего класса. Class A{ int a; A(int x=0)!!!{a=х};}

void f(A x); int main(){ f(5); A x(10); - разрешено т.к. есть преобразование. !!!

Приведе́ние ти́па — преобразование значения переменной одного типа в значение другого типа. int X; int Y = 200; char C = 30;

X = (int)C * 10 + Y; //переменная С приведена к типу int.

Операции new и delete для класса - Если для класса явно не заданы, то можно исп. стандартные версии: new:-выделяет память в куче,-вызывает конструктор

delete:-освобождает память,-вызов деструктора

void *operator new(int size){return malloc(size);}

void operator delete(void *p){free(p);}

Моди­фикатор const: неизменяемые поля класса. Список инициализации.

const int a2; Константы получают своё значение в списке инициализации

A(int a2=10){…}; конструктора. Ссылка в С++ ведет себя как константный указатель, поэтому поля ссылки должны быть проинициализированы в списке инициализации конструктора.

    1. Константные объекты клас­са. Константные методы. Ключевое слово mutable. Пример реализации двусвязного списка с помощью классов.

Для константных объектов запрещен вызов не константных методов класса. Константный метод в общем случае не может изменять значение полей класса. Константные методы можно вызывать для неконстантных объектов класса. class A{int a;

int getA() const{return a;}}

mutable int a; -отмечает те поля, знач которых int main() { const A x;

можно изменять в константных методах. int x=getA();}

Пример реализации двусвязного списка с помощью классов.

list.h

сlass List{struct Node{ int key;

char *data;

Node *prev,*next;}

public: List();

~List();

List(List&);//констр. копиров.

List & operator=(List&);

void add(int key,char *data);

void delNode(int key);

void*find(int key);

void show();

void delllist();

private: Note*findNode(int key);

В открытой части List, нигде не используется

класс Node

list.cpp

#include “list.h”

#include “iostream”

using namespace std;

List::List(){first=0;}

List::~List(){delist();}

int List::Node::findNode(int key){Node*tmp=first;

while(tmp){if(tmp->key==key) return key;

tmp=tmp->next}

return 0;}

void List::show(){Node *tmp=first;

while(tmp){cout<<tmp->key<<” . “ <<tmp->data<<endl;}

tmp=tmp->netx;}

    1. Статические поля и методы класса.

class A

{public: static int i;}

/* Обязательно нужно проинициализировать */

int A::i = 0;

int main(){

A::i = 1;}

Статические методы не привязаны к объектам класса, за счет того, что им не пережается скрытый указатель this. Поэтому статические методы можно вызывать даже если нет ни одного объекта класса. В статических методах из-за отсутствия this нет возможности на прямую обращатся к нестатическим полям и методам класса. Если поле объявлено статич., оно ведет себя как внешняя переменная. Размещается в сегменте данных и существует в единств. экземпляре, независимо от того сколько задано обьектов. Статическое поле существует даже если нет обьектов. Статич. поле по умолчанию обнуляется.

7)Общая структура программы на C++. Общая структура программы на Java. Общая структура программы на С#.

Программа на языке С++ представляет собой набор функций. Одна из функций должна иметь имя main. Операционная система передает управление в программу пользователя на функцию с этим именем и тем самым начинается выполнение программы. От функций в программе функция main отличается тем, что ее нельзя вызвать изнутри программы, а ее параметры, если они существуют, обычно  задаются ОС, хотя это необязательно, main бывает первой функцией в тексте программы.    main ( )    {     ...    return 0;    } Если предположить, что main- первая функция, определенная в программе на языке С++, то поскольку ни одна функция не может содержать определения другой функции, следом в тексте будут располагаться определения вспомогатель-ных функций, «неглавных» функций. Их может быть различное количество. Функции могут быть описаны в произвольном порядке.

   main ( )    { ... return 0;}    function 1 ( ) { }

------- Программа на языке C# может состоять из одного или нескольких файлов. Каждый файл может содержать ноль или более пространств имен. Пространство имен может включать такие элементы, как классы, структуры, интерфейсы, перечисления и делегаты, а также другие пространства имен. Ниже приведена скелетная структура программы C#, содержащая все указанные элементы.

C#

using System; // A skeleton of a C# program

namespace YourNamespace{}

class YourClass{}

struct YourStruct{}

interface IYourInterface {}

delegate int YourDelegate();

enum YourEnum {}

namespace YourNestedNamespace{

struct YourStruct {}

}

class YourMainClass

{

static void Main(string[] args)

{

//Your program starts here...

}}}

7) Java

import java.lang – аналог using namespace std в С++

import java.lang.* - все имена

import java.lang.system – Виден только system

Public class Hello{

public static void main(String[]args){

System.out.println(“Hello from java”);} }

java.lang – подключается автоматически.

private, public, protected- доступ из др. пакетов, default – доступ на уровне пакета.

Если class public, то его обьявление должно хранится в файле, имя которого совпадает с именем класса (class hello -> hello.java).

Точка входа в прогр. main, должна быть открытым public static void main

Метод main выполняется, когда еще нет ни одного объекта какого либо класса->static

У метода main всегда один аргумент- массив строк-те аргументы которые могут передав. при запуске из командной строки main(String[]args), args – ссылка на объект класса массив строк. В java у любого класса м.б. метод main, поэтому м.б. много точек входа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]