C, PHP, VB, .NET

Дневникът на Филип Петров


Архив за ноември, 2008

* Виртуални класове

Публикувано на 14 ноември 2008 в раздел С/С++.

При директното наследяване на множество базови класове е възможно един производен клас да наследи многократно даден базов клас. Така обаче може да се получи дублиране на член променливи.

Нека например класа vehicle има два производни класа: motorvehicle (добавя допълнителна информация за типа двигател на превозното срество) и passengervehicle (добавя информация за максималния брой пътници в превозното средство). Ако създадем клас car, който наследява едновременно motorvehicle и passengervehicle, то ние ще получим дублиране на член-променливи, тъй като класа car ще наследи двукратно член-променливите декларирани в класа vehicle.

Многократното наследяване може да се избегне чрез наследяване на базовия клас като виртуален. Това предотвратява присъствието на 2(или повече) копия на базовия клас във всеки следващ индиректен производен клас. Декларацията в този случай ще има вида: Прочети още…

.

 


* Указател към функция

Публикувано на 14 ноември 2008 в раздел С/С++.

Указателите към функции водят до някои много интересни и ефективни програмни техники. Както подсказва името им – това са указатели, които сочат към адреса в паметта, където е записана дадена функция. Тук трябва да отбележим, че указателите към функции не са нововъведение от С++, а са известни още от много компилатори за С. Оказват се особено подходящи при извикване на „callbacks“ и за създаване на събития (events). Callback наричаме функция, която програмистът не е извикал изрично в програмния код. За тяхното изпълнение се грижи друга функция, която е приела указател към нейния адрес. Прочети още…

.

 


* Наследяване

Публикувано на 14 ноември 2008 в раздел С/С++.

Когато един клас наследява друг се използва общата форма:

	class <производен-клас>:<тип-достъп> <име-базов-клас> {
		//...
	};

Типът достъп е една от трите ключови думи: public, private или protected. Разликата между тях е:
– Ако наследяването е тип public, то на производния клас се допуска достъп до членовете на неговия собствен клас, на неговия базов клас и на функции, външни за класовете.
– Ако наследяването е тип protected, то се допуска достъп до членовете на неговия собствен клас, на неговия базов клас, но не се допуска достъп на функции външни за класа.
– Ако наследяването е тип private, то производният клас няма достъп до private елементите на базовия клас и външни функции. Прочети още…

.

 


* Допълнителни задачи към упражнение 4

Публикувано на 14 ноември 2008 в раздел С/С++.

Задача: Дефинирайте клас point с елементи координатите на точка x и y.
– Дефинирайте член-функция show, която отпечатва координатите на точката.
– Дефинирайте член-функция dist, която приема два псевдонима към клас point и връща разстоянието между подадените две точки.
– Предефинирайте член-функцията dist, така че да и предаваме указатели към две точки.

Задача: Дефинирайте два класа – програмист и мениджър. Всеки от класовете да съдържа public елементи име, години и трудов стаж. Като private елементи двата класа да имат елементи заплата и масив от 12 елемента от тип int, в който да се записват броя работни часове за месеците през годината. Напишете:
– Конструктори и деструктори на класовете.
– Приятелска функция за двата класа, която показва кой повече е работил през годината и съответно кой взима по-голяма заплата.

.

 


* Фиксиране на потребителски сесии

Публикувано на 14 ноември 2008 в раздел ОСУП.

В тази статия се засяга проблема с фиксиране на потребителски сесии при интернет базирани приложения. Този материал е превод на статията на Mitja Kolsek от acrossecurity.com, която достатъчно подробно описва теорeтичната част на проблема. В последствие в допълнителни статии ще добавим и конкретни практически примери за защита срещу този род атаки.

Почти всички интернет приложения използват потребителски сесии, за да създават по-персонализирана среда на своя уеб сайт. Сесията на всеки отделен потребител се съхранява и управлява на сървъра чрез уникален идентификационен номер (session ID). Точно тези идентификатори са често основна цел на атакуващите, които чрез тях могат да „откраднат самоличността“ на потребител. Повечето сървъри вече имат изградени защити или поне добри съвети за практики за предпазване на тези ключове, главно от три класа атаки: Прочети още…

.

 


* Запознаване със средата на Visual Studio .Net

Публикувано на 12 ноември 2008 в раздел Програмни Среди.

Когато отворите Visual Studio .Net ще видите приблизително следния екран:

Visual Studio .Net първа страница

Visual Studio .Net – заглавна страница

Лентата в ляво на екрана е динамична. Тя може да бъде заменяна от различни инструменти. Центъра на екрана е обикновено областта за редактиране на програмния код, а в лентата с инструменти горе обикновено се извеждат само най-често използваните опции от главното меню. Прочети още…

.

 


* 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 <указател>;

Прочети още…

.