Категория ‘С/С++’
* Наследяване
Публикувано на 14 ноември 2008 в раздел С/С++.
Когато един клас наследява друг се използва общата форма:
class <производен-клас>:<тип-достъп> <име-базов-клас> {
//...
};
Типът достъп е една от трите ключови думи: public, private или protected. Разликата между тях е:
- Ако наследяването е тип public, то на производния клас се допуска достъп до членовете на неговия собствен клас, на неговия базов клас и на функции, външни за класовете.
- Ако наследяването е тип protected, то се допуска достъп до членовете на неговия собствен клас, на неговия базов клас, но не се допуска достъп на функции външни за класа.
- Ако наследяването е тип private, то производният клас няма достъп до private елементите на базовия клас и външни функции. Прочети още...
* Допълнителни задачи към упражнение 4
Публикувано на 14 ноември 2008 в раздел С/С++.
Задача: Дефинирайте клас point с елементи координатите на точка x и y.
- Дефинирайте член-функция show, която отпечатва координатите на точката.
- Дефинирайте член-функция dist, която приема два псевдонима към клас point и връща разстоянието между подадените две точки.
- Предефинирайте член-функцията dist, така че да и предаваме указатели към две точки.
Задача: Дефинирайте два класа - програмист и мениджър. Всеки от класовете да съдържа public елементи име, години и трудов стаж. Като private елементи двата класа да имат елементи заплата и масив от 12 елемента от тип int, в който да се записват броя работни часове за месеците през годината. Напишете:
- Конструктори и деструктори на класовете.
- Приятелска функция за двата класа, която показва кой повече е работил през годината и съответно кой взима по-голяма заплата.
* Stack или heap?
Публикувано на 06 ноември 2008 в раздел С/С++.
При разглеждането на оператора new споменахме понятието "динамична памет" (heap), но не дадохме ясно определение защо се използва. Когато дефинираме променливи по обикновения познат начин (например "int x = 5;") те се записват в стека (stack) на паметта. Стандартно тази памет е 1MB и може да се досетите, че в много случаи тя ще бъде недостатъчна (например ако искаме да създадем гигантски масив с един милион елемента double d[1000000]). Компилаторът няма да даде грешка, но програмата няма да може да се изпълни (ще се даде грешка от типа stack overflow). Прочети още...
* Приятелски функции
Публикувано на 06 ноември 2008 в раздел С/С++.
Приятелски се наричат функциите, които не са член-функции на клас, но имат достъп до неговите private елементи. Приятелски функции се използват, когато е необходимо една функция да има достъп до private членовете на два или повече различни класа. Декларацията на приятелската функция може да се намира както в частта public, така и в частта private и се характеризира с ключовата дума friend, която се поставя в началото на декларацията. Една приятелска функция се дефинира като обикновена функция, която не е член на клас. Има два вида приятелски функции: Прочети още...
* Класове, член-функции, конструктори и деструктори
Публикувано на 06 ноември 2008 в раздел С/С++.
Класовете позволяват да дефинираме нови типове данни. Един клас представлява описание на тип, включващ едновременно данни и функции, които ги обработват. Данните се наричат член-променливи, а функциите – член-функции. Дефиницията на един клас включва декларация на класа и дефиниции на член-функциите.
Декларацията на класа има следния синтаксис:
class <име-на-клас>{
// Декларации на член-променливи
// Декларации на член-функции
};
Дефиницията на член-функция има следния синтаксис:
<връщан-резултат> <име-на-клас>::<функция>(вх. парам.)
{
// Tяло на функцията
}
За да се създаде обект, се използва името на класа като спецификатор за типа. Прочети още...
* Оператори new и delete
Публикувано на 06 ноември 2008 в раздел С/С++.
Както вече споменахме, в обектно-ориентираното програмиране е възможно да създаваме много инстанции на един и същи "модул" (обект). Контролът върху този обект се осъществява чрез операторите new и delete. Обекти, създадени чрез операторът new, се наричат "динамични обекти". Те се разпределят в паметта за динамични обекти (heap). Синтаксисът е следният:
<указател> = new <тип>;
Типа данни на указателя трябва да съвпада с типа данни на обекта, който създаваме. По този начин създаваме нова променлива, която е достъпна чрез указателя. Унищожаването на така създаден обект се осъществява, чрез операторът delete:
delete <указател>;
* Константи, псевдоними и булев тип
Публикувано на 06 ноември 2008 в раздел С/С++.
Всички типове данни от С (int, float, double, char, указатели, и тн...), които сме разгледали дотук, са валидни и за С++. Като разширение на езика ни се предоставят и допълнителни възможности:
1. Константи: Досега, когато ни се налагаше да въвеждаме константи използвахме предпроцесора. Това не винаги е удобно, а освен това може да доведе до неочаквани грешки. Затова в С++ са въведени константи:
const <тип> <име на променлива> = <стойност>;
Както се досещате те са много удобни при дефиниране на размерност на масиви, заделяне на памет и в всякакви подобни операции, където използваме една и съща постоянна величина на множество места в програмата. Важно е да се каже, че е задължително константите да се инициализират в момента на декларирането си. Прочети още...
* Въведение в C++
Публикувано на 06 ноември 2008 в раздел С/С++.
C++ на практика е език, който "надгражда" езика за програмиране С, като добавя нови възможности:
- Обектно-ориентирано програмиране
- Създаване и използване на абстрактни типове данни
- Подобрения на някои съществуващи конструкции
На практика вие можете да използвате всичко научено дотук от езика за програмиране С при С++ (най-малкото примерите от предишните статии са писани за компилаторът на Microsoft - Visual C++ 6.0). Затова няма да преразглеждаме вече научени езикови конструкции, а ще даваме примери за част от нововъведенията. Прочети още...
* Накратко за обектно-ориентираното програмиране
Публикувано на 06 ноември 2008 в раздел С/С++.
За да обясним понятието "обектно-ориентирано програмиране" е добре да опишем какви програми писахме на езика за програмиране С досега:
1. Скриптови програми: Последователно изпълнение на предварително зададена поредица от операции.
2. Процедурно програмиране: Възможност за "разклоняване" на програмата, така че тя да извършва различни последователности от операции (процедури или както споменахме в т.1 - скриптове), в зависимост от въведени данни от потребителят. След изпълнение на дадена процедура програмата се "връща" на мястото, където процедурата е извикана.
3. Модулно-процедурно програмиране: Предоставя възможност за обединяване на различни процедури в т.нар. "модули". По този начин разделяме програмата на различни логически части, които се свързват почежду си чрез т.нар. "procedure calls". Прочети още...
* Допълнителни задачи към упражнения 2 и 3
Публикувано на 01 ноември 2008 в раздел С/С++.
Задача: Дадена е матрица с N реда и M стълба, която може да съдържа елементи числата 0 и 1. Нека тази матрица е лабиринт, в който 0 означава, че има път, а 1 че има препятствие. Елемент (0, 0) се нарича вход, а елемент (N, M) изход от лабиринта. В лабиринта можем да се движим само по хоризонтала и вертикала. Напишете програма с меню и следните функции:
- Въвежда елементите на матрицата от клавиатурата.
- Генерира случаен лабиринт.
- Обхожда лабиринта и намира възможен път (ако има такъв).
- Намира най-краткият от възможните пътища (ако има такива).
Задача: Даден е едномерен масив от тип int. Запълнете масива с произволни числа и реализирайте функция, която намира най-голямото възможно число, образувано от елементите на масива.
Задача: В текстов файл са записани имена, телефони и e-mail адреси в следния формат:
Ivan, 0888555666, ivan@abv.bg
Petko, 0899555666, petko@yahoo.com
...
Напишете програма, която прочита файла и:
- Изважда имената и телефоните и ги записва в нов файл phonebook.txt, като всяко име и телефон са на отделен ред.
- Изважда всички e-mail адреси и ги записва във файл maillist.txt, като всеки адрес е на нов ред.