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

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

class Z {

 int z[10];

 Z() { this = my_allocator(sizeof(Z)); }

 ~Z() { my_deallocator(this); this = 0; }

};

Если выделение памяти уже произошло (как бывает для членов и объектов auto или static), то при входе в конструктор this имеет ненулевое значение и значение нуль в противном случае.

Вызовы конструкторов для членов и базовых классов произойдут только после того, как this получил значение. Если в конструкторе базового класса есть присваивание this, то новое значение this будет использоваться и в конструкторах производных классов, если они есть.

Отметим, что при наличии указанного анахронизма или тип указателя this не может быть *const, или нужно делать исключение для this из правила о присваивании указателям со спецификацией const.

R.18.3.4 Приведение указателей на функцию-член

Указатель на функцию-член некоторого объекта можно привести к указателю на какую-то другую функцию, например (int (*) ())p-›f. Результирующий указатель будет настроен на функцию, вызов которой будет происходить с помощью обращения к этой функции-члену для того же объекта. Как обычно результат такого вызова считается неопределенным.

R.18.3.5 Невложенность классов

Если класс описан внутри другого класса и в программе больше не описано классов с этим именем, то его можно использовать, как если бы он был описан вне класса (так обстоит дело с описанием struct в С), например:

struct S {

 struct T {

  int a;

 };

 int b;

};


struct T x; // означает `S::T x;'

Список служебных слов

auto автоматический

break разрыв

case вариант

catch перехватить

char символ

class класс

const конст

continue продолжить

default по умолчанию

delete удалить

do делать

double двойной

else иначе

enum перечисление

extern внешний

float плавающий

for для

friend друг

goto переход на

if если

inline подстановка

int целый

long длинный

new новый

operator оператор

private частный

protected защищенный

public общий

register регистровый

return возврат

short короткий

signed знаковый

sizeof размер

static статический

struct структура

switch переключатель

template шаблон типа

this текущий

throw запустить

try проверить

typedef тип

union объединение

unsigned беззнаковый

virtual виртуальный

void пустой

volatile изменяемый

while пока

* ПРИМЕРЫ *

b1_1_1.cxx

#include ‹stream.hxx›


main()

{

 cout ‹‹ "Hello, world\n";

}

b1_1_3.cxx

#include ‹stream.hxx›


main ()

{

 int inch = 0;

 cout ‹‹ "inches=";

 cin ›› inch;

 cout ‹‹ inch;

 cout ‹‹ "in = ";

 cout ‹‹ inch*2.54;

 cout ‹‹ " cm\n";

}

b1_4_5v.cxx

#include ‹stream.hxx›


main()

{

 const float fac = 2.54;

 float x, in, cm;

 char ch = 0;


 for (int i= 0; i‹ 8; i++) {

  cerr ‹‹ "enter length: ";

  cin ›› x ›› ch;


  if (ch == 'i') {// inch

   in = x;

   cm = x*fac;

  }

  else if (ch == 'c') {// cm

   in = x/fac;

   cm = x;

  }

  else

   in = cm = 0;


   cerr ‹‹ in ‹‹ "in = " ‹‹ cm ‹‹ " cm\n";

 }

}

b1_5.cxx

#include ‹stream.hxx›

extern float pow(float, int);


main()

{

 for (int i=0; i‹10; i++) cout ‹‹ pow(2,i) ‹‹ "\n";

}


extern void error(char *);


float pow(float x, int n)

{

 if (n ‹ 0) {

  error ("sorry, negative exponent to pow()");

  return 0;

 }


 switch (n) {

 case 0: return 1;

 case 1: return x;

 default: return x*pow(x,n-1);

 }

}


void error(char *s)

{

 cout ‹‹ s;

}

b1__13.cxx

#include ‹stream.hxx›


// 1.11

class vector {

 int *v;

 int sz;

public:

 vector(int); // constructor

 ~vector(); // destructor

 int size() { return sz; }

 void set_size(int);

 int& operator[](int);

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

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

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