Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Перетворення за допомогою конструкторів.↑ ⇐ ПредыдущаяСтр 3 из 3 Содержание книги
Поиск на нашем сайте
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);} void f(Y) 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; просмотров: 119; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.110.45 (0.006 с.) |