Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Перетворення за допомогою конструкторів.Содержание книги
Поиск на нашем сайте Char->int; int->char; Double->float. Конструктор з одним обов’язко-вим параметром задає не явне перетворення параметричного типу, якому цей конструктор належить. Class c {public: c(d);} //c->d class x {public: x(int); x(const char *, int=0);} void f() {x x1=1; //x(int) x x2=”example”; //x (const char*, int=0) -не обов’язковий x x3,x4; x3=2; x4=”One more time”;} class X {public: X(int);} class Y {public: Y(X);}
f(3); //error int->X->Y
23.Перетворення за допомогою перетворюючих ф-цій. Перетвор.ф.–ф. член кл. Синтаксис: Class c{operator ім”я типу();}; c->ім”я типу. Обгрунтування існування пере-твор. Ф.: 1.Коли треба перетворити кори-стувацький тип у базовий стан-дартний,за допомогою конструк-тора це не можливо (int (X)-некоректно) class X {public: operator int()}; 2.Тоді,коли треба виконати пе-ретворення з якогось користува-цького типу Х в якийсь штучний тип Y і небажано змінювати X->Y class X {public: operator int(); operator Y();}; Наприклад: Class employer {char*name; int code; public: operator int();} employer::operator int(); {return code;} Тип повертаємого значення та список формальних параметрів перетворюючі ф. задавати не мо-жуть. Class X {int operator (int*());//error operator int*(int);// error operator int*();}//Ok 3.Перетвор.ф. не може переван-тажуватися. Class X {public:operator int();}; void f (X a) {int i; X b; i=(a<1)?a:0; if(a) i=b; else i=a&&b;}; 4.Перетвор.ф. можуть наслідува-тися. Class c {public:operator int();}; class d: public c {...} void main () {d 0; int i=0; cout<<i;} 5.Перетвор.ф. може бути віртуа-льною. Class c {public: vitual operator char () {return ‘c’;}}; class d:public c {public:operator char() {return ‘d’};}; void f(c*pc,d*pd) {count<<*pc<<’_’<< *pd; pc=new d; cout<<*pc;} Якщо на екрані з’явиться d,то це означає, що перетвор.ф. може бути віртуальною.
24.Області видимості. В мові Си діє декілька просторів імен, шаблони структур, перелі-кових типів для структур..., змінні, мітки. Struct S {...}S; //Ok Область видимості одна.В С++ один простір імен та багато об-ластей видимості для кожного простору.Стандарт ANSI-прос-тір імен,неявна область видимо-сті. Int i; Class c {int i; void f ();}; void f (){...=i;}; //гло- бальна і. Void c::f(){...=i;};//гло- бальна і. Приклад: Int i; Class c {int i; friend void f();} void f(){...=i;}; //гло- бальна і. Приклад: Int i,j; Class b {public: int i,j;}; class d: public b {int i; void f(){i=j};} Правила для областей: 1.Кожній області видимості від-повідає своя таблиця імен та іде-нтифікаторів.В С++ існують таб-лиці символів: глобальна(існує в єдиному екземплярі),таблиця кл.,ф.Вони зв’язані між собою таким чином,що кожна таблиця має покажчик на батька,у глоба-льній покажчик нульовий.Таб-лиця кл. показує на беспосеред-ній базовий кл.Таблиця ф.вка-зує на таблиці кл.(якщо вона є членом),або на глобальну табли-цю. 2.Область видимості задається посльдовністю таблиць символів від даного місця в програмі і до глобальної таблиці. Class B {/*1*/} B,GP Void f1 (); {/*2*/ f1,GP class c1 {/*3*/ c1,GP class c2:public B {/*4*/ c2,B, GP friend void f2() {/*5*/} f2,GP void f3(){/*6*/}} f3,c2, B,GP void f4(){/*7*/}} f4,c1, GP }
25.Об’ктно-орієнтовані можливості потоків. Ієрархія по-токових кл. Введення/ виве-дення потокових кл., типи кот-рих створені користувачем. Потоки-це послідовність еле-ментів данних, спрямована від джерела до споживача. Cout<<i<<...<<j; Operator<<(..,..); // (ostream&,int) Cout<<i<<f<<d; При виводі int послідовність зна-чень перетворюється в послідо-вність символів,а при вводі від-бувається перетворення симво-лів на деяке значення типу конк-ретних даних. Ієрархія потокових класів Ios<-istream<-iosteam
Ostream Ці кл. містяться в бібліотеці <iostream.h> Існують кл. ifstream,ofstream –визначають файл для потоку. При введені інформації з потоку: 1.Встроєні типи istream>>(int); //для char немає float Імена cin,cout-це екземпляри кл. istream,ostream; Треба виклик. Cin.get(); (cin.operator>>(i)).operator>>(j)... class a{...}; a A; cin>>A; class complex {public: friend istream&operator (istream;complex c);}; istream& opera tor>>(istream&,com- plex c)// обов”язково бо інакше створюється локальна змінна. {return i>>Re>>Im;}
26.Потоки.Віртуальні операції введення та виведеня. Потоки-це послідовність елеме-нтів данних, спрямована від джерела до споживача. Cout<<i<<...<<j; Operator<<(..,..); // (ostream&,int) Cout<<i<<f<<d; При виводі int послідовність зна-чень перетворюється в послідов-ність символів,а при вводі від-бувається перетворення симво-лів на деяке значення типу конкретних даних. Cin>>ptr; A*ptr; Ptr=new B Перевантаженя >>.Дружність. friend istream&operator >>(istream&,A*p) {return p->input;} istream&A::input(istream&) //virtual (return i>>0;) class A {public: virtual istream & input(instream&);}
27.Форматування потоків. Ма-ніпулятори. Стан потоку описується типом fmt flags він інкапсульований в кл. ios.Флаг (ios.h) Skipws-пропускати пропуски. Left,right-вирівнювати Dec,oct,hex-система чмслення.fixed-формат виведення чисел з плавоючою точкою. Функції: Ios::fmtflags flags()-считується стан потоку Ios::fmtflags flags(fmtflags&)-встановлюється стан потоку Flags(flags()/ ios::fixed) Ios::setf(fmtflags&)-встановлюються ф-ції стану потоку Setf(ios::dec/ios::left) Краще користуватися маніпуля-торами. Unsetf();-очистка стану потоку. Проміжний стан між флагами потоку та маніпуляторами. 1.ios::width(int)-задає ширину даних вводимих в потік. 2.ios::precision(int)-для вводу чи-сел з плавоючою крапкою по за-мовчуванню. Звертенн я: Cout.width(5); Cout<<’(’<<123<<’)’; Cin>>a>>b>>c; Cout<<a<<b<<flash<<c //flash-ф-ція,що дозволяє виво-дити в окремий файл: ios::flash() -виводить те,що в буфері. Ostream&operator << (ostream&,MyType&) ios::ostream&flash(); ostream(*f)(); //cтановимо замість MyType ostream&operator<< (ostream&0,ostream&(*f)()) {return 0.(*f)();} cout<<a<<b<<width(5)<<c; width(5)-це визов конструктора,що вертає об”єкт і через об2єкт викликає ф-цію Виконаємо перевантаження: ostream&operator<< (ostream&0,smanip&m) {return m.f(m.i)}//дозволить викликати ф-цію і передати параметр. Class smanip {ostream&(*f)(int i); int i; smanip(ostream&(*f) (int i),int ii)f(ff),i(ii);} class c {public: smanip&operator() (int ii);} c width; c::smanip&operator() (int ii) {return smanip(les::width,ii);}
|
||
|
Последнее изменение этой страницы: 2016-08-14; просмотров: 213; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.009 с.) |