class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

STL

основы

введение
Инструментарий
Проекты в C++
Комментарий
Утверждения
Идентификаторы
Область видимости
Литералы
Типы данных, переменные
Константы, перечисления
Выражения и операции
Агрегатные типы
Указатели
Ссылки
Массивы
Строки
Управляющие операторы
Функции
Аргументы функции

ООП

Терминология
Определение классов
Константные методы
Статические члены
Наследование
Инкапсуляция
Полиморфизм
Инициализация и уничтожение объектов
this

прочее

шаблоны
макросы
динамическая память
исключения
rtti

Справочник по C++

Область видимости

В общем, каждый модуль (файл *.cpp или *.с) состоит из нескольких локальных областей видимости ограниченных составным оператором. Таким образом, естественными областями видимости являются функции, классы и методы. Идентификатор объявленный вне блока находится в глобальной области видимости. За исключением механизма перегрузки функций, внутри одной области нельзя использовать один и тот же идентификатор в разных целях.

пространство имен

Хорошие имена быстро заканчиваются, поэтому для удобства в глобальной области можно создавать отдельные пространства имен namespace. Например, все стандартные идентификаторы С++ определены в пространстве имен std. Если определено несколько пространств с одним именем, то они рассматриваются компилятором как одно целое. С помощью оператора using можно разрешить использование всех или конкретного имени пространства напрямую в текущей области видимости. Также разрешаются анонимные пространства, имена определенные в них доступны только в текущем модуле.

Если имя в пространстве имен не разрешено оператором using, то к нему можно обратиться через операцию расширения видимости ::. Эта операция также используется для доступа к статическим членам класса.

#include <iostream>

// разрешаем свободное использование
// всех имен определенных в std
using namespace std;

// создаем пространство имен N1
namespace N1 {

void out() {
	cout<<"     N1"<<endl;
}

// вложенное пространство имен
namespace N1a{

void out() {
	cout<<"     N1a"<<endl;
}

};
};

//создаем второе пространство имен 
namespace N2 {

void out() {
	cout<<"     N2"<<endl;
}

};

// продолжение пространства имен N1
namespace N1 {

void func() {}
};

//-----------------------------------------------
void test1(){
// ошибка в текущей области, в данном случае глобальной,
// нет функции out()	
// out(); 	

// вызываем функции out из различных пространств 	
N2::out(); 	
N1::out(); 		
}

void test2(){
// разрешаем свободное использование имен из N2
// внутри функции
using namespace N2;

// нет ошибки, так как есть доступная out() 
out();  	 		
}

void test3(){
// разрешаем свободное использование 
// одного указанного имени из N1::N1a
// внутри функции
using N1::N1a::out;

// нет ошибки, так как есть доступная out()
out(); 	 		
}

//-----------------------------------------------
int main() {
cout<<"test1\n";test1();
cout<<"test2\n";test2();
cout<<"test3\n";test3();

return 0;
}

модули

Сам по себе модуль также является отдельной областью видимости. Для доступа к глобальным переменным из другого модуля используется объявление с атрибутом extern, которое обычно размещается в заголовочном файле. Естественно в этом случае, только один модуль должен реально определять это имя. Для примера, создайте простой проект из трех файлов.

//-----------------------
// файл myinc.h

// объявление переменной определенной 
// в каком-либо модуле проекта
extern int var;

//-----------------------
// файл module2.cpp
#include "myinc.h"

// определяем переменную в этом модуле
int var=54;

//------------------------
// файл main.cpp
#include <iostream>
#include <cstdlib>
#include "myinc.h"

using namespace std;

int main()
{
cout << "var=" <<var<< endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Аналогичным образом используются константы из другого модуля.


Рейтинг@Mail.ru