Листинг 2: локальный класс

#include

using namespace std;

void f();

int main()

{

f () ;

// Класс myclass из этого не виден,

return 0;

}

void f ()

{

class myclass {

int i;

public:

void put_i(int n) { i=n; }

int get_i() { return i; }

} ob;

ob.put_i(10);

cout

}

Итог: 10;

Особенности локального класса:

  • в локального класса возможно применять типы, статические (static) и внешние (extern) переменные, элементы перечислений и внешние функции из области, в которой он обрисован; запрещается применять автоматические переменные из данной области;
  • локальный класс не имеет возможности иметь статических элементов;
  • способы этого класса смогут быть обрисованы лишь в класса;

деструкторы и Конструкторы

Листинг 3. Пример класса стек с конструктором

//stack.h

#pragma once

#include

namespace stk{

//тип стека

typedef int DType;

class Stack{

DType *stck;

int top;

int size;

public:

//Конструктор

Stack(int s);

Stack(const Stack st);

~Stack();

// операции модификации стека

void push(const DType item);

DType pop();

void clear();

// доступ к стеку

DType peek (void) const;

int get_size() const { return size;}

// способы проверки стека

bool isEmpty() const;

bool isFull() const; // реализация массива

};

}

Пример реализации:

//stack.cpp

#include stack.h

namespace stk{

//Конструктор

Stack::Stack(int s)

{

top = -1;

stck = new DType[size];

size = s;

}

Stack::Stack(const Stack st)

{

top = st.top;

size = st.size;

stck = new DType[size];

for(int i=0; i

stck[i] = st.stck[i];

}

Stack::~Stack()

{

delete [] stck;

}

void Stack::push(const DType item)

{

if (top == size-1){

std::cerr

return;

}

stck[++top] = item;

}

DType Stack::pop()

{

if (top == -1){

std::cerr

return 0;

}

return stck[top—];

}

void Stack::clear(void)

{

top = -1;

}

DType Stack::peek() const

{

if (top == -1)

{

std::cerr

exit(1);

}

return stck[top];

}

bool Stack::isEmpty() const

{

return top == -1;

}

bool Stack::isFull() const

{

return top == size-1;

}

}

Пример применении:

#include

#include stack.h

using namespace std;

int main(int argc, char *argv[])

{

system(chcp 65001);

stk::Stack st(5); // stk::Stack st = 5;

for (int i=0; i st.get_size(); i++){

st.push(i+1);

}

cout

stk::в один раз st2 = st;

for (int i=0; i st.get_size(); i++){

cout

cout

}

return 0;

}

Итог:

St: 5

St2: 5

St: 4

St2: 4

St: 3

St2: 3

St: 2

St2: 2

St: 1

St2: 1

Конструктор рекомендован для инициализации объекта и вызывается машинально при его создании:

Свойства:

  • Конструктор не возвращает значения
  • Конструктор возможно перегружать
  • Конструктор, вызываемый без параметров, именуется конструктором по умолчанию.
  • Параметры конструктора смогут иметь любой тип, также же класса.
  • В случае, если программист не указал ни одного конструктора, компилятор формирует его машинально.
  • Конструкторы не наследуются.
  • Конструкторы нельзя описывать с модификаторами const. virtual и static.
  • Конструкторы глобальных объектов вызываются до вызова функции main.

Синтаксис

Имя класса ([параметры]){}

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

• для локальных объектов — при выходе из блока, в котором они заявлены;

• для глобальных — как часть процедуры выхода из main:

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

Имя деструктора начинается с тильды (~), за которой направляться имя класса.

Свойства:

  • не имеет доводов и возвращаемого значения;
  • не может быть заявлен как const либо static;
  • не наследуется;
  • возможно виртуальным
  • В случае, если деструктор явным образом не выяснен, компилятор машинально формирует безлюдной деструктор.

Синтаксис

~Имя класса ([параметры){}

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

Конструктор копирования — это особый вид конструктора, приобретающий в качестве единственного параметра указатель на объект этого же класса:

Имя класса (const Имя класса obj) {

//Тело конструктора

}

Конструктор копирования вызывается:

  • при описании нового объекта с инициализацией вторым объектом;
  • при передаче объекта в функцию по значению;
  • при возврате объекта из функции^

Если не указано ни одного конструктора копирования, компилятор формирует его машинально. Таковой конструктор делает поэлементное копирование полей. В случае, если класс содержит указатели либо ссылки, это, вероятнее, будет неправильным, потому, что и копия, и оригинал будут показывать на одну и ту же область памяти.

Любой конструктор класса, принимающий один параметр какого-либо другого типа, именуется конструктором преобразования, потому, что он осуществляет преобразование из типа параметра в тип этого класса.

Урок 02. PHP — ООП. Класс (class). Свойства и методы класса


Интересные записи:

Понравилась статья? Поделиться с друзьями: