Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++_навч_пос14_new.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.86 Mб
Скачать

2.25 Масив як параметр функції

#include <iostream.h>

int sum1(int A[5])//оголошення функції sum1

{

//тут можлива зміна масиву V

int s=0;

for(int i=0;i<5;i++) s=s+A[i];

return s;//повернути значення суми елементів масиву s

}

int sum2(int *A)//оголошення функції sum2

{

//тут можлива зміна масиву V

int s=0;

for(int i=0;i<5;i++) s=s+A[i];

return s;//повернути значення суми елементів масиву s

}

void main()

{

int V[5]={1,2,3,4,5};//оголошення локального масиву

cout<<sum1(V)<<endl;//передача аргументів по посиланню

cout<<sum2(V)<<endl;//передача аргументів по посиланню

}

2.26 Рядки і функції обробки рядків

#include <iostream.h>

#include <string.h>//заголовочний файл з функціями обробки рядків

void main()

{

//оголошення і ініціалізація рядків (масиву символів)

char s[20]="cpp";

char s2[20]="";

char s3[]={'h','e','l','l','o','\0'};

*s='C';//присвоїти першому символу рядка 'C'

*(s+1)='+';//другому символу

*(s+2)='+';//третьому символу

*(s+3)='!';//четвертому символу

//вивести довжину рядків

cout<<s<<" "<<strlen(s)<<endl;

cout<<s3<<" "<<strlen(s3)<<endl;

strcpy(s2,"plus");//копіювати в рядок

cout<<s2<<endl;//вивести рядок

strncpy(s2,"C plus plus",6);//копіювати в рядок 6 символів

cout<<s2<<endl;

char *p=strstr(s,"++");//знайти підрядок в рядку

cout<<p<<endl;

strcat(s,s3);//об'єднати рядки

cout<<s<<endl;

float x=strtod("5.37",&p);//конвертувати рядок в дійсне число

gcvt(x,3,s);//конвертувати дійсне число в рядок

cout<<s<<endl;

}

2.27 Структури

#include <iostream.h>

struct A//структура А (тип даних)

{

char Name[10];//поле типу масив символів

int Year;//поле цілого типу

bool Sex;//поле логічного типу

};

//функція для виводу вмісту об'єкта

void prn(A *ps)

{

cout<<ps->Name<<endl;

cout<<ps->Year<<endl;

cout<<ps->Sex<<endl;

}

void main()

{

//оголошення і ініціалізація об'єкта s1

A s1={"Ivan",1980,true};

A s2;//оголошення об'єкта s2

//присвоєння полям значень

strcpy(s2.Name,"Vasyl");

s2.Year=1981;

s2.Sex=true;

//динамічне створення структури

//ps - вказівник на структуру

A *ps=new A;

//присвоєння полям значень

strcpy(ps->Name,"Inna");

ps->Year=1983;

ps->Sex=false;

//вивід вмісту об'єктів

prn(&s1);

prn(&s2);

prn(ps);

delete ps;//вивільнення ps

}

2.28 Обробка виключних ситуацій

//слова try, throw, catch

#include <iostream.h>

#include <stdio.h>

//клас виключної ситуації

class Ex

{

public:

float x;//поле

char s[20];//поле

Ex(float a,char *str)//конструктор

{x=a; strcpy(s,str);}

};

void main()

{

float a=1,b,c;

do//початок циклу

{

cin>>b;//ввести b

//блок, в якому можливе виникнення виключної ситуації

try {

if (b<0) throw b;//генерувати виключну ситуацію float

if (b==0) throw "b=0";//генерувати виключну ситуацію char*

if (b>1000) throw Ex(b," b>1000");//генерувати виключну ситуацію Ex

if (b==1) throw true;//генерувати виключну ситуацію bool

c=a/b;

cout<<c<<endl;//вивести с

}

//перехоплення виключної ситуації float

catch (float x){cout<<"b="<<x<<endl;}

//перехоплення виключної ситуації char*

catch (const char *s){cout<<s<<endl;}

//перехоплення виключної ситуації Ex

catch (Ex obj) {cout<<obj.x<<obj.s<<endl;}

//перехоплення інших виключних ситуацій

catch (...){cout<<"warning! exception!\n";}

}while(getchar()!='q');//поки не натиснуто q

}

3 Об’єктно-орієнтоване програмування мовою C++

3.1 Простий клас

#include <iostream.h>

//клас A

class A

{

//відкриті члени класу

public:

int a;//поле цілого типу a

void print()//метод print

{cout<<a<<endl;}

};

void main()

{

A obj;//оголошення об’єкту obj типу A

obj.a=2;//присвоїти полю a об’єкта obj 2

obj.print();//виклик методу print об’єкта obj

}

3.2 Структура

#include <iostream.h>

//структура A

struct A

{

//відкриті члени

int a;//поле цілого типу a

void print()//метод print

{cout<<a<<endl;}

};

void main()

{

A obj;//оголошення об’єкту obj типу A

obj.a=2;//присвоїти полю a об’єкта obj 2

obj.print();//виклик методу print об’єкта obj

}

3.3 Об’єднання

//об'єднання

#include <iostream.h>

union A//об'єднання A

{int x;//поле x цілого типу

float y;//поле y дійсного типу

};

int main()

{

A u;//створити екземпляр u об'єднання A

u.x=1;//присвоїти x 1

u.y=2;//присвоїти y 2, x не доступне

cout<<u.x<<endl;//помилка!

cout<<u.y<<endl;//об’єднання містить тільки дане y

return 0;

}

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

#include <iostream.h>

class A //клас A

{

int a,b;//закриті поля класу

public://відкриті члени класу

//конструктор (метод) зі списком ініціалізації закритих полів

A(int inita,int initb):a(inita),b(initb){};

void print()//метод

{cout<<a<<" "<<b<<endl;}

};

void main()

{

A obj(2,3);//створення об’єкту і виклик конструктора

obj.print();//виклик методу

}

3.5 Деструктор

#include <iostream.h>

class A

{

char *a;

int len;

public:

A(int ln)//конструктор A

{

len=ln;

//динамічно виділити пам’ять для масиву символів кількістю len

//вказівник a вказує на перший елемент масиву

a=new char[len];

}

~A()//деструктор ~A

{delete a;}//вивільнити пам’ять для a

void input(char *s)//метод для вводу рядка

{a=s;}

void print()//метод для виводу рядка

{cout<<a<<endl;}

};

void main()

{

A obj(4);//створити об’єкт і викликати конструктор

obj.input("hello");//викликати метод

obj.print();//викликати метод

//викликати деструктор

}