C, PHP, VB, .NET

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


* Константи, псевдоними и булев тип

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

Всички типове данни от С (int, float, double, char, указатели, и тн…), които сме разгледали дотук, са валидни и за С++. Като разширение на езика ни се предоставят и допълнителни възможности:

1. Константи: Досега, когато ни се налагаше да въвеждаме константи използвахме предпроцесора. Това не винаги е удобно, а освен това може да доведе до неочаквани грешки. Затова в С++ са въведени константи:

	const <тип> <име на променлива> = <стойност>;

Както се досещате те са много удобни при дефиниране на размерност на масиви, заделяне на памет и в всякакви подобни операции, където използваме една и съща постоянна величина на множество места в програмата. Важно е да се каже, че е задължително константите да се инициализират в момента на декларирането си.

За дефиниране на указатели към константи има една особеност – трябва указателят да се дефинира като указател към константен тип:

	const int x;
	const int *px;
	px = &x;

Така дефинираният указател ще „сочи“ адреса на променливата, но няма да може да променя нейната стойност.

Възможно и много често използвано е да се създадат константни указатели към не-константна променлива. По този начин указателят няма да може да променя стойността в оригиналните данни:

	int x, y=2;
	const int *p;
	p = &y;
	p = &x;
	x = 5;
	*p = 10; // тук получаваме грешка

Може да създаваме и указатели с константен адрес, които могат да променят стойността на променливата:

	int x, y;
	int *const p = &x;
	*p = 5;
	p = &y; // грешка

Накрая ще демонстрираме константен указател с константен адрес:

	int x, y;
	const int *const p = &x;
	*p = 5; // грешка
	p = &y; // грешка

2. Псевдоними: Известни са още като „съотнасящи“ типове (на английски reference types). Използват се за дефиниране на второ име на вече съществуващ обект:

	<тип> &<име на променлива> = <друга променлива>;

Например:

	int x = 5;
	int &refx = x;

След като са дефинирани можем да използваме псевдонимите все едно използваме оригиналните променливи. Изключително удобни са, когато искаме да предадем променливи като параметри на функция, която трябва да промени оригиналните параметри след изпълнението си (но не искаме да използваме синтаксиса на указатели). Следният пример демонстрира това:

	#include "stdafx.h"
	#include "iostream.h"

	void func(int &a, int &b){
		a--;
		b++;
	}

	int main(int argc, char* argv[])
	{
		int a=5, b=6;
		func(a, b);

		// Ще се отпечата "a=4, b=7"
		cout << "a=" << a << ", b=" << b;
		return 0;
	}

Освен това трябва да се отбележи, че когато инициализираме указател към псевдоним, то ние все едно дефинираме указател към „оригиналния“ обект.

Възможно е както вече демонстрираното предаване на превдоним като входен параметър на функция, така и функция връщаща резултат псевдоним.

3. Булев тип: Състои се от два елемента – стойностите true (истина) и false (лъжа). Дефинира се чрез ключовата дума bool:

	bool x, y=true;
	x = false;

Можем да използваме булевите променливи по същият начин както в С използвахме стойностите 0 и 1. Следният пример показва как може да използваме булева променлива като индикатор дали поредица от операции е завършила успешно:

	bool completed = false;
	... // правим изчисления и евентуално променяме "completed"
	if (completed) cout << "finished";
	else cout << "some error occured";

 



Един коментар


  1. N каза:

    bool completed = false;
    … // правим изчисления и евентуално променяме „completed“
    if (completed) cout << "finished";
    else cout << "some error occured";
    vasilka kaza , 4e e gre6no

Добави коментар

Адресът на електронната поща няма да се публикува


*