Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Основные понятия. Класс представляет собой тип, определяемый пользователем, и в простейшем случае имеет вид:

Класс представляет собой тип, определяемый пользователем, и в простейшем случае имеет вид:

сlass имя_класа{

//члены класса

};

Объект – это экземпляр класса или переменная типа класс. Класс задаёт целую категорию объектов

Список членов класса включает данные-члены (далее – данные), представляющие объект, и функции-члены (далее – функции), выполняющие действия над ними. Все объекты имеют общие функции, но каждый объект создаёт и поддерживает свои собственные данные.

По умолчанию все данные и функции класса являются закрытыми (private), т.е. доступны только в пределах класса. Чтобы сделать их доступными вне класса, используется модификатор public. Обычно данные класса объявляются как private, а функции – как public:

class Samp {

int n, m; // private -данные

public:

init(); // public -функции

};

Для создания объекта испольуют имя класса как спецификатор типа данных:

Samp ob1; // создание объекта ob1 класса Samp

Доступ к закрытым членам класса осуществляется через открытые функции класса. К открытым членам класса можно обращаться, используя имя объекта и операциюточка (.):

ob1. init(); // вызов функции init()

Функции класса определяют как обычные функции, но перед именем функции пишется имя класса и операция разрешения области видимости (::):

Samp::init(){ // определение функция init() класса Samp

n = 10; m = 20;

}

Определение функции класса может находиться и внутри описания класса. Такие функции называются inline -функциями.

Дружественные функции – это функции, которые не являются членами класса, но имеет доступ к закрытым членам класса (но только через объект ). Отличительным признаком дружественной функции является ключевое слово friend. Дружественная функция задаётся и вызывается как обычная функция, может быть дружественной более чем одному классу, может быть членом одного класса и дружественной другому.

Конструктор – это специальная функция класса, которая вызывается автоматически при создании объекта и предназначена для его инициализации. Конструктор должен иметь тоже имя, что и класс, должен быть открытым членом класса, может быть перегружен, может иметь параметры, но не может возвращать значение, даже типа void. Если класс не содержит ни одного конструктора, конструктор по умолчанию создаётся компилятором как функция без параметров и с пустым телом.

Конструктор по умолчанию – это конструктор, который совсем не имеет параметров или у которого все параметры заданы как аргументы по умолчанию (их можно задавать только в прототипе конструктора внутри определения класса). Класс может иметь только один конструктор по умолчанию.

Деструктор – это функция класса, которая вызывается автоматически при удалении объекта. Имя деструктора начинается c символа тильды (~), непосредственно за которым следует имя класса. Деструктор не может иметь параметров, не может возвращать значение, его нельзя перегружать. Класс должен иметь только один деструктор или ни одного, в этом случае он создаётся компилятором как пустая функция (без параметров и с пустым телом).

Примеры выполнения задания

// Пример 1. Определение класса для нахождение суммы, произведения

// двух целых чисел, создание объекта, использование конструктора.

#include <iostream>

using namespace std;

class Chisla{ // класс Chisla

int a, b; // данные a и b класса

public:

Chisla (int x, int y); // конструктор с параметрами

int sum(); // функция sum() – длявыч. суммы

int mult(); // функция mult() – для выч. произведения

void show(); // функция show() – для вывода чисел

};

Chisla:: Chisla (int x, int y){ // определение конструктора

a = x; b = y; // инициализация a, b

}

int Chisla::sum(){ // определение функции sum ()

return a + b;

}

int Chisla::mult(){ // определение функции mult ()

return a * b;

}

void Chisla::show(){ // определение функции show ()

cout<<" a = "<<a<<" b = "<<b<<endl;

}

int main(){ // функция main()

int n, m;

int s, pr;

cout<<"vvedi chisla: ";

cin>>n>>m; //ввод чисел

Chisla ob(n, m); // создание объекта ob типа Chisla

ob.show(); // вызов функции show ()

s = ob.sum(); // вызов функции sum ()

pr = ob.mult(); // вызов функции mult()

cout<<"summa = "<<s<<" mult = "<<pr<<endl;

// можно вызов функций вставлять в cout

// cout<<"summa = "<<ob.sum()<<" mult = "<<ob.mult()<<endl;

system("pause");

return 0;

}

// Пример 2. Определение класса для нахождения суммы цифр

// заданного натурального числа.

#include <iostream>

using namespace std;

class Cifra{ // класс Cifra

long chislo;

int sum;

public:

Cifra(long n); // конструктор

void summa(); // функция получения суммы цифр числа

void show(); // функция вывода суммы цифр числа

};

Cifra::Cifra(long n){ // определение конструктора

chislo = n; // инициализация переменной chislo

}

void Cifra::summa(){ // определение функции summa ()

sum = 0;

long rab = chislo;

while(rab){ // цикл для выделения цифр числа

sum = sum + rab % 10; // и их суммирования

rab = rab / 10;

}

}

void Cifra::show(){ // определение функции show ()

cout<<"summa cifr= "<<sum<<endl;

}

int main(){ // функция main()

long n;

cout<<"vvedi chislo: ";

cin>>n; // например, введём 31456

Cifra ob(n); // создание объекта ob типа Cifra

ob.summa(); // вызов функции summa ()

ob.show(); // summa cifr = 19

system("pause"); // задержка экрана

return 0;

}

// Пример 3. Определение класса для нахождения суммы цифр

// натуральных чисел из диапазона от n до m

#include <iostream>

using namespace std;

class Cifra {

long n;

int sum;

public:

Cifra (long x); // конструктор с параметром

void summa(); // функция получения суммы цифр числа

void show(); // функция вывода суммы цифр числа

};

Cifra::Cifra(long x){ // определение конструктора

n = x; // инициализация n

}

void Cifra::summa(){ // определение функции summa()

sum = 0;

long rab = n;

while(rab){ // цикл по выделению цифр числа

sum = sum + rab%10; // и накоплению суммы в переменной

rab/=10; // класса sum

}

}

void Cifra::show(){ // определение функции show()

cout<<"; summa cifr chicla = "<<sum<<endl;

}

int main() { // функция main()

long n, m, i;

cout<<"vvedi n, m: "; cin>>n>>m;

for(i = n; i < m; i++){

cout<<"chislo= "<<i;

Cifra ob(i); // создание объекта ob типа Cifra

ob.summa(); // вызов функции summa()

ob.show();

}

system("pause");

return 0;

}

// Пример 4. Использование конструктора по умолчанию.

#include <iostream>

using namespace std;

class Cub{ // определение класса Cub

int len; int wid; int hei;

public:

Cub(int l = 1, int w = 1, int h = 1); // конструктор по умолчанию

void show(){cout<<endl<<len<< ' ' <<wid<< ' ' <<hei;}

int volum(){return len*wid*hei;}

};

Cub::Cub(int l, int w, int h){ // по умолчанию значения равны 1

len = (l > 0)? l:1;

wid = (w > 0)? w: 1;

hei = (h > 0)? h: 1;

}

int main() {

Cub ob1, ob2(3), ob3(3, 2), ob4(5, 4, 3), ob5(-1, -2, -3);

ob1.show(); cout<<" v = "<<ob1.volum(); // 1 1 1 v = 1

ob2.show(); cout<<" v = "<<ob2.volum(); // 3 1 1 v = 3

ob3.show(); cout<<" v = "<<ob3.volum(); // 3 2 1 v = 6

ob4.show(); cout<<" v = "<<ob4.volum(); // 5 4 3 v = 60

ob5.show(); cout<<" v = "<<ob5.volum(); // 1 1 1 v = 1

cout<<endl;

system ("pause");

return 0;

}

// Пример 5. Перегрузка конструктора для случая инициализации объекта

// явно указанными значениями и значениями, заданными по умолчанию.

#include<iostream>

using namespace std;

class Samp { // определение класса Samp

int x;

int y;

public:

Samp(){x = 0; y = 0;}

Samp(int m, int n){x = m; y = n;}

void show(){cout<<x<< ' ' <<y<<endl;}

};

int main (){

Samp ob1(5, 55); // объявление с явной инициализацией

Samp ob2; // объявление без явной инициализации

ob1.show(); // 5 55

ob2.show(); // 0 0

system("pause");

return 0;

}

<== предыдущая лекция | следующая лекция ==>
Реакции перегруппировки | З А Я В Л Е Н И Е. В интересах Ганеева Эдуарда Гайдаровича
Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 227; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.