Lect04
.pdfПространствоимен
Обращениекэлементампространства именвыполняетсяспомощью
операциирасширениявидимости
::
space1::fun1(); space2::x = 7;
ит.п.
Пример:пространствоимен
#include "stdafx.h" #include <iostream> using namespace std;
namespace SpaceA {
void do_a() { cout << "SpaceA" << endl;
}
namespace SubSpaceA { void do_a() {
cout << "Sub-SpaceA" << endl;
}
}
}
Пример:пространствоимен
namespace SpaceB { void do_a() {
} }
cout << "SpaceB" << endl;
namespace SpaceA { void do_b() {
cout << "SpaceA - continued" << endl;
} }
Пример:пространствоимен
void test1() {
//Ошибка: нет функции do_a //в глоб. пространстве имён
//do_a();
//Ok - явно указано пространство
SpaceB::do_a();
SpaceA::do_a();
}
Пример:пространствоимен
void test2() {
//разрешаем свободное
//использование имен из
//SpaceB внутри функции using namespace SpaceB;
//нет ошибки
do_a();
}
Пример:пространствоимен
void test3(){
// разрешаем свободное
// использование // одного указанного имени
// из SpaceA::SubSpaceA // внутри функции
using SpaceA::SubSpaceA::do_a;
// нет ошибки
}do_a();
Пример:пространствоимен
int x = 7;
int _tmain(int argc, _TCHAR* argv[]) { int x = 5;
cout <<"test1" << endl; test1(); cout <<"test2" << endl; test2(); cout <<"test3" << endl; test3(); cout <<"x="<< x << " global x="
<< ::x << endl; cin.ignore(); return 0;
}
Результаты
test1 SpaceB SpaceA test2 SpaceB test3 Sub-SpaceA
x=5 global x=7
Статическиечленыкласса
Статическиечленыобъявляютсяс
использованиемключевогослова static
Статическиеатрибутыиметоды являютсяобщимидлявсех экземпляров.
Статическиеметодымогутиспользовать толькостатическиеатрибутыкласса.
Статическиечленыкласса
Обращениекстатическимчленам производитсяпутёмуказанияимени типаиоперациирасширенияобласти видимостииличерезобъект.
MyClass a; a.NormalMethod(); MyClass::StaticMethod(); a.StaticMethod();