Читаем Справочное руководство по C++ полностью

Чтобы установить заданное расположение полей с помощью дополнения нулями, используют безымянные битовые поля. Особый случай, когда используется безымянное поле нулевой длины. Оно задает выравнивание следующего битового поля по границе элемента памяти, используемого при размещении полей.

Безымянное поле не является членом и не может инициализироваться.

Битовые поля должны иметь целочисленный тип (§R.3.6.1). Их интерпретация зависит от того, считается ли значение поля с обычным типом int (т.е. без явного использования signed или unsigned) знаковым или беззнаковым. Операция взятия адреса & не применима к битовым полям, так что не может быть ни указателей на битовые поля, ни ссылок на них.

R.9.7 Вложенные описания классов

Класс можно описать в описании другого класса. Такой класс называют вложенным. Имя вложенного класса локально по отношению к объемлющему классу. Вложенный класс находится в области видимости объемлющего класса. Если не считать явного использования указателей, ссылок или имен объектов, то в описаниях вложенного класса допустимы только имена типов, статических членов и элементов перечисления из объемлющего класса.

int x;

int y;


class enclose {

public:

 int x;

 static int s;


 class inner {


 void f(int i)

 {

  x = i; // ошибка: присваивание enclose::x

  s = i; // нормально: присваивание enclose::s

  ::x = i; // нормально: присваивание глобальному x

  y = i; // нормально: присваивание глобальному y

 }


 void g(enclose* p, int i)

 {

  p-›x = i; // нормально: присваивание enclose::x

 }


 };

};

inner* p = 0; // ошибка: `inner' вне области видимости

Функции-члены вложенного класса не имеют особых прав доступа к членам объемлющего класса, они подчиняются обычным правилам доступа (§R.11). Аналогично, функции-члены объемлющего класса не имеют особых прав доступа к членам вложенного класса и подчиняются обычным правилам доступа, например:

class E {

 int x;

 class I {

  int y;

  void f(E* p, int i)

  {

   p-›x = i; // ошибка: E::x частный член

  }

 };


 int g(I* p)

 {

  return p-›y; // ошибка: I::y частный член

 }

};

Функции-члены и представляющие данные, статические члены из вложенного

класса можно определить в глобальной области видимости, например:

class enclose {

 class inner {

  static int x;

  void f(int i);

 };

};


typedef enclose::inner ei;

int ei::x = 1;


void enclose::inner::f(int i) {/*… */}

Подобно функции-члену дружественная функция, определенная в данном классе, находится в области видимости этого класса. Она подчиняется тем же правилам связывания имен, что и функции-члены (они указаны выше и в §R.10.4), и не имеет так же как они особых прав доступа к членам объемлющего класса и к локальным переменным функций этого класса (§R.11).

R.9.8 Описания локальных классов

Класс можно описать в определении функции, такой класс называется локальным. Имя локального класса считается локальным в объемлющей области видимости, а областью видимости локального класса является объемлющая область видимости. В описаниях локального класса из объемлющей области видимости можно использовать только имена типов, статических переменных, внешних переменных и функций, а также элементы перечисления. Приведем пример:

int x;

void f()

{

 static int s;

 int x;

 extern int g();

 struct local {

  int h() { return x; } // ошибка: `x' автоматическая

  int j() { return s; } // нормально

  int k() { return ::x; } // нормально

  int l() { return g(); } // нормально

 }

}

Объемлющая функция не имеет особых прав доступа к членам локального класса, она подчиняется обычным правилам доступа (§R.11). Функцию-член локального класса следует определять в определении этого класса. Локальный класс не может иметь статических членов, представляющих данные.

R.9.9 Имена локальных типов

Имена типов подчиняются точно таким же правилам областей видимости, как и другие имена. В частности, имена типов, определенные в описании класса, нельзя использовать вне этого класса без уточнения, например:

class X {

public:

 typedef int I;

 class Y {/*… */}

 I a;

};


I b; // ошибка

Y c; // ошибка

X::Y d; // ошибка

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT