Шпаргалка по "Программированию"

Автор: Пользователь скрыл имя, 08 Ноября 2011 в 12:07, шпаргалка

Краткое описание

Работа содержит ответы на вопросы по дисциплине "Программирование".

Файлы: 1 файл

default.doc

— 264.50 Кб (Скачать)
  1. Базовые принципы объектно-ориентированного программирования.

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

    Полиморфизм обеспечивает возможность использования одного кода для решения разных задач. Реализуется ч\з механизм виртуальных функций и перегрузки и переопределения.

    Наследование, благодаря которому один объект наследует свойства другого объекта, добавляя к нему свои.

    class A

    {

    public:

          virtual void fun(){ cout << "fun from A" << endl;}

    };

    class B1:public A

    {

    public:

          void fun(){ cout << "fun from B1" << endl;}

    };

    class B2:public A

    {

    public:

          void fun(){ cout << "fun from B2" << endl;}

    };

    int main(){

          A *p, obA;

          B1 obB1;

          B2 obB2; 

          p=&obA; // указатель на объект базового класса

          p->fun(); 

          p=&obB1;   p->fun(); 

          p=&obB2;  p->fun(); 

          return 0;

    } 
     
     
     
     
     
     
     
     
     
     
     
     

  1. Базовые конструкции объектно-ориентированных  программ.

    Hjj

      Базовыми  блоками ООП являются объект и класс. Объект С++ - абстрактное описание некоторой сущности, например, запись о человеке. Формально объект определить достаточно сложно. Класс – это множество объектов, имеющих общую структуру и поведение.

      struct str

      {  char a[10];

          double b;

      };

        str s1,s2;

      Все данные делятся на локальные и  глобальные. Локальные данные недоступны (через окно). Доступ к ним и их модификация возможна только из компонент-функций этого объекта. Глобальные данные видны и модифицируемы через окно (извне). Для активизации объекта (чтобы он что-то выполнил) ему посылается сообщение. Сообщение проходит через окно и активизирует некоторую глобальную функцию. Тип сообщения определяется именем функции и значениями передаваемых аргументов. Локальные функции (за некоторым исключением) доступны только внутри класса.

      Говоря  о реализации объекта, мы подразумеваем особенности реализации функций соответствующего класса (особенности алгоритмов и кода функций).

      Объект  включает в себя все данные, необходимые, чтобы описать сущность, и функции  или методы, которые манипулируют этими данными.

      Основная  идея класса как абстрактного типа заключается в разделении интерфейса и реализации.

      Интерфейс показывает, как можно использовать класс. При этом совершенно неважно, каким образом соответствующие функции реализованы внутри класса.

      Реализация  – внутренняя особенность класса. Одно из требований к реализации – критерий изоляции кода функции от воздействия извне. Это достигается использованием локальных компонент данных и функций.

    #include <iostream.h>

      class kls

      {    int max,a,b,c; 

      public: 

          void init(void);          

          void out();

    private:

          int f_max(int,int,int);

    };

      void kls::init(void)          // инициализация компонент a, b, c  класса

      { cout << “Введите 3 числа  ";

         cin >> a >> b >> c;

         max=f_max(a,b,c);     // обращение к функции, описанной как private

      }

      void kls::out(void)         // вывод max числа на экран

      { cout <<"\n MAX из 3  чисел = " << max <<' endl;

      }

      int kls::f_max(int i,int j, int k) );    // функция нахождения наибольшего из

      { int kk;                                        //  трех чисел

         if(i>j) if(i>k) return i;

           else return k;

         else if(j>k) return j;

           else return k;

      }

      void main()

      { kls k;        // объявление объекта класса kls

         k.init();     // обращение к public функциям   ( init  и out)

         k.out();

      }

  1. Конструктор и деструктор. Конструктор по умолчанию.

    Конструктор – функция, имя которой совпадает с именем класса, в котором он объявлен и используется. Он ничего не возвращает. К. м.б. без параметров, с параметрами по умолчанию, с параметрами и копии. Функции к.: выделить память под объект и инициализации (заносит начальные данные).

    ~Деструктор – метод, приводящий к разрушению объекта соответствующего класса и возвращающий системе область памяти, выделенную конструктором.

    class Man

    {

    public:

          char *FIO;

          int year; 
     

          Man(char *s = "\0", int y = 0);

          void print();

          ~Man();

    };

     

    Man ::Man(char *s, int y)

          int len = strlen(s);

          FIO = new char[len + 1];

          strcpy(FIO, s); 

          year=y; 

    } 

    Man::~Man()

    { 

          delete [] FIO;

    } 

    void Man::print()

    {

          cout<<FIO<<'\t'<<year<<endl;

    }  

    int main(){ 

          Man ob("a",5);

          ob.print(); 

          return 0;

    } 
     
     

  1. Конструктор копирования.

    Предназначен  для создания копии объекта в  случае, если этот объект, например, передаётся в качестве параметра в некоторую  функцию по значению, а также при  возврате объекта из метода, например, локального объекта. Конструктор копии  необходим в случае, если в классе содержится динамические данные.

    class A

    {

    private:

          char *str;

          int len;

    public:

          A(); 

          A(const A&);

          ~A();

    }; 

    A::A()

    {

          len = 20;

          str = new char[len + 1];

    } 

    A::A(A const &obj1) //copy from obj1 to obj

    {

          this->len = obj1.len;

          str=new char[len+1];

          strcpy(str,obj1.str);

    } 

    A::~A()

    {

          delete []str;

    } 

    void fun(A obj1)

    {

          cout<< "qwert" << endl;

    } 

    void main()

    {

          A obj;

          fun(obj);  

    } 
     
     
     
     

  1. Конструктор explicit.

    В примере  целочисленный размер массива м.б. передан в качестве параметра конструктору и недопустимы преобразования целых чисел во временный объект.

    class Mass

    { private:

                int n;

                int *M;

          public:

                class Size

                {

                private:

                      int count;

                public:

                      Size(int count1):count(count1){}

                      int size_mass() const {return count;}

                };

                Mass(int n, int m)

                {this->n=n;

                M=new int[this->n];

                for(int i=0; i < this->n; i++)

                      M[i] = m;

                }

                Mass(Size s)

                {

                      n = s.size_mass();

                      M = new int[n];

                }

                ~Mass()

                {

                      delete []M;

                }

    }; 

    void main()

    {

          Mass ob(1); 

    }

Компилятор для объекта ob генерирует вызов конструктора Mass(int). Но такого не существует. Компиляторы могут преобразовывать аргумент типа int во временный объект Size, поскольку в классе Size имеется конструктор с одним параметром. Это обеспечивает успешное создание объекта.

_____________________

есть класс stown, у него есть конструктор с одним  параметром stown(double k) 
затем мы где-нить в программе пишем: 
stown myCat; 
myCat = 19.333 // и Опа! используется stown(double) для преобразования 19.333 в stown.

    а уже  с explicit компилятор тебя пошлет! Ффот )))) 
     

Информация о работе Шпаргалка по "Программированию"