Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Результаты выполнения программы




Пример.

class test{ private: int i; public: test(int _w=0){i=_w;cout<<"sozd ob i="<<i<<endl;} ~test(){cout<<"razrush ob i="<<i<<endl; } void print(){ cout<<" i="<<i<<endl;} };   main(){   test a(1); a.print(); test b; b.print();   ... }

Примеры конструкторов:

test() {i=0;}//без параметра test(int _i) { i=_i;}//с параметром test(int _i=10){i=_i;}// с параметром по умолчанию  

 

Любая функция-член имеет доступ к закрытым элементам класса. Конструктор test и функция print в классеtest имеют доступ к переменной i.

 

Чтобы создать объект ”классового ” типа используется имя класса: например,

test a(1), b;  

 

Альтернативные варианты инициализации объекта:

test a=1;//если конструктор принимает только один аргумент test a=test(1); test a(1);

После создания объект класса будет иметь собственную копию членов данных этого класса: в примере test a(1), b; каждый из объектов a и b будет иметь собственные копии переменной i.

 

Чтобы получить доступ к открытому члену класса через объект этого класса, используется оператор “точка”: например,

a.print(); b.print();  

 

В объявлении класса содержатся, как правило, прототипы функций-членов.

Например, объявление класса test может быть следующим:.

class test{ private: int i; public: test(int _w=0); //к-р с параметром по умолчанию ~test(); //деструктор void print(); //функция без параметров и без возвращаемого значения };  

 

Чтобы реализовать функцию, которая является членом класса, необходимо сообщить компилятору, какому классу она принадлежит, квалифицировать имя этой функции с именем класса:

test:: test(int _w=0) { i=_w; cout<<"sozd ob i="<<i<<endl; };   test:: ~test() {cout<<"razrush ob i="<<i<<endl; }   void test:: print() { cout<<" i="<<i<<endl;}    

 

Оператор разрешения области видимости “::” квалифицирует имя члена вместе с именем его класса

 

Встраиваемая функция – это небольшая (по объему кода) функция, код которой подставляется вместо ее вызова.

 

Любая функция, которая определяется в объявлении класса, автоматически становится встраиваемой (если она не содержит циклы, переключатели, не является рекурсивной …).

 

Определение небольших функций-членов в объявлении класса – обычная практика в С++ программировании.  

Указатель this

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

Указатель this выступает в роли неявно заданного указателя на текущий объект. Указатель this доступен только в функциях-членах класса и позволяет сослаться на объект, для которого вызвана функция. Чаще всего он находит применение в конструкторах, выполняющих резервирование памяти. Кроме того, в различных программах можно встретить операторы, возвращающие значение текущего значения при помощи указателя this:

return(*this);

Пример.

В классе primer используется конструктор и функция – показать данные (функция описана двумя способами show1 и show2). Добавьте в класс метод - конкатенация двух строк: конкатенация с this и без this.

#include <iostream>

using namespace std;

class primer{ char title[256];//по умолчанию эти переменные - приватные char autor[256]; public: primer(char*_title, char*_autor);//конструктор void show1();//показать с this void show2();//показать без this };
int main() { primer book("My life","Daria sergeeva"); book.show1(); book.show2(); return 0; }
primer::primer(char*_title, char*_autor) {strcpy(title,_title); strcpy(autor,_autor); } void primer::show1() {cout<<this->title<<" "; cout<<this->autor<<endl; //далее круглые скобки необходимы, так как операция точка (.) имеет более //высокий приоритет cout<<(*this).title<<" "; cout<<(*this).autor<<endl; } void primer::show2() { cout<<title<<" "; cout<< autor<<endl; }

Результаты выполнения программы

My life Daria sergeeva My life Daria sergeeva My life Daria sergeeva

В С++ автоматически поддерживаются следующие функции-элементы:

– конструктор по умолчанию, если конструкторы не определены,

– конструктор копирования, если он не определен (выполняет поэлементное копирование нестатических элементов – поверхностное копирование),

– оператор присваивания, если он не определен,

– заданный по умолчанию деструктор, если он не определен,





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 259 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

В моем словаре нет слова «невозможно». © Наполеон Бонапарт
==> читать все изречения...

2174 - | 2121 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.