Скачать презентацию Лекция 2 Классы в C Часть 1 Артур Скачать презентацию Лекция 2 Классы в C Часть 1 Артур

Lecture_03_classes_1.ppt

  • Количество слайдов: 14

Лекция 2. Классы в C++. Часть 1. Артур Садеков Лекция 2. Классы в C++. Часть 1. Артур Садеков

Что такое класс • • • Определяемый пользователем тип Представление некоторой концепции Содержит не Что такое класс • • • Определяемый пользователем тип Представление некоторой концепции Содержит не только данные, но и функции Nortel Networks Confidential

Члены классов и управление доступом class Stack { class Date { public: void create_stack(int Члены классов и управление доступом class Stack { class Date { public: void create_stack(int size); void init_date(int d, int m, int y); void destroy_stack(); void next_date(); void push(char); int get_day(); char pop(); int get_month(); int get_max_size(); int get_year(); int get_current_size(); private: int day, month, year; max. Size; char* storage; int private: top; }; Nortel Networks Confidential void set_day(int); void set_month(int); void set_year(int); };

Члены классов и управление доступом (продолжение) void Stack: : create_stack(int size) { max. Size=size; Члены классов и управление доступом (продолжение) void Stack: : create_stack(int size) { max. Size=size; storage=new char[max. Size]; top=0; } void Stack: : push(char c) { if (top

Члены классов и управление доступом (продолжение) { { push(‘a’); //ошибка Date date; Stack stack; Члены классов и управление доступом (продолжение) { { push(‘a’); //ошибка Date date; Stack stack; date. init_date(20, 08, 2007); stack. create_stack(100); date. set_day(35); //ошибка stack. push(‘a’); char c = stack. pop(); stack. max. Size = 200; Date *d = &date; //ошибка d->get_month(); stack. destroy_stack(); d->month = 13; d->set_month(13); Stack *p= new Stack; p->create_stack(300); p->push(‘c’); p->top = 0; } //ошибка Nortel Networks Confidential } //ошибка

Указатель на себя - this void Stack: : create_stack(Stack* this, int size) { this->max. Указатель на себя - this void Stack: : create_stack(Stack* this, int size) { this->max. Size=size; this->storage=new char[max. Size]; this->top=0; } void Stack: : push(Stack* this, char c) { if (this->top < this->max. Size) this->storage[this->top++] = c; } char Stack: : pop(Stack* this) { return this->top ? this->storage[--this->top] : 0; } Nortel Networks Confidential

Конструкторы class Stack { class Date public: { Date (int dd=0, int mm=0, int Конструкторы class Stack { class Date public: { Date (int dd=0, int mm=0, int yy=0); //. . . Stack(); Stack(unsigned int size); //. . . }; Stack default_stack; Stack short_stack(20); Stack long_stack(500); Nortel Networks Confidential }; Date today(26, 5, 2004); Date any_day;

Конструкторы (продолжение) Stack: : Stack(unsigned int size): max. Size(size), top(0) Date: : Date(int d, Конструкторы (продолжение) Stack: : Stack(unsigned int size): max. Size(size), top(0) Date: : Date(int d, int m, int y) { day=d? d: current_day(); { month=m? m: current_month(); storage = new char[size]; } year=y? y: current_year(); } Stack: : Stack() { storage = new char[max. Size=100]; top=0; } Nortel Networks Confidential

Конструкторы по умолчанию class Date { public: void next_date(); int get_date(); . . . Конструкторы по умолчанию class Date { public: void next_date(); int get_date(); . . . }; { class Date (int dd, int mm, int yy); //. . . }; Date today(26, 5, 2004); Date any_day; // ошибка компиляции { Date (); Date (int dd, int mm, int yy); //. . . }; Date today(26, 5, 2004); Date any_day; constructor. cc: 27: no matching function for call to ` Date: : Date ()' constructor. cc: 12: candidates are: Date: : Date (int, int) constructor. cc: 11: Date: : Date (const Date &) Nortel Networks Confidential

Деструкторы • • Освобождают ресурсы: файлы, память, блокировки Вызываются неявно, когда переменная выходит из Деструкторы • • Освобождают ресурсы: файлы, память, блокировки Вызываются неявно, когда переменная выходит из области видимости, удаляется объект и т. д. class Stack { public: Stack(); ~Stack(); //. . . }; Stack: : ~Stack() { if storage { delete[] storage; } Nortel Networks Confidential }

Константные функции-члены class Date { int day, month, year; public: //. . . int Константные функции-члены class Date { int day, month, year; public: //. . . int get_day(); int get_day() const; int get_month() const; int get_year() const; } } int Date: : get_day() { return day++; void f(Date& d, const Date& cd ) { int i = d. get_year(); } d. add_year(2); int j = cd. get_year(); Nortel Networks Confidential cd. add_year(3); //ошибка комп. }

Статические члены class Counter { int Counter: : count = 0; public: static int Статические члены class Counter { int Counter: : count = 0; public: static int incr(); int Counter: : incr() int get_counter(); { private: static int count; return ++count; } }; int Counter: : get_counter() Counter count; { return count; count. incr(); Counter: : incr(); int i = count. get_counter(); }; Nortel Networks Confidential }

Преимущества классов • Класс - определяемый пользователем тип • Новые типы настолько же удобны Преимущества классов • Класс - определяемый пользователем тип • Новые типы настолько же удобны в использовании, как и встроенные Программы легче понимать и изменять Проще анализировать код и обнаруживать ошибки Отделение деталей реализации от интерфейса • • • Nortel Networks Confidential

Конец Nortel Networks Confidential Конец Nortel Networks Confidential