Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

техпрог / Comp-Sci-04

.pdf
Скачиваний:
44
Добавлен:
10.02.2015
Размер:
676.57 Кб
Скачать

Материалы к лекции 4.

Объектно-ориентированное программирование

Ключевое слово const. Разный смысл ключевого слова const

Константные переменные

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

const double pi=3.1415; // нельзя изменять pi // pi=3.14156; // ошибка

Объявление константной переменной должно сопровождаться инициализацией переменной.

Замечание. В языке C константы определялись с помощью директивы

#define PI 3.1415

Указатель на константу (const Тип *)

Адрес может меняться, а содержимое памяти по этому адресу – нет.

double s=2; double * u=&s;

const double *t=&s; *u=5; // так можно s=100; // так можно

//*t=6;// а так нельзя - const запрещает изменять значение *t double yy=3;

t=&yy; // так можно

Константный указатель (Тип* const)

Адрес изменять нельзя, но можно изменять содержимое памяти по этому адресу.

double x=3, v=5;

double * const pt = &x; // pt указывает только на x cout<<"\n *pt= "<< *pt<<" x= "<<x<<endl;

*pt=11;

//pt=&v; // этот оператор приведёт к ошибке

Константный указатель на константу (const Тип* const)

Константный указатель на константу изменять нельзя.

// 4. Константный указатель на константу double r =3.14156;

double rr =3.14;

const double * const pr=&r;

cout<<"\n r="<<r<<" *pr= "<<*pr<<endl;

*pr = 3.14; // Ошибка - изменять значение нельзя pr = &rr; // Ошибка - изменять адрес нельзя

Пример.

// constexample.cpp : Использование const

//

#include "stdafx.h" #include <iostream> using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

// 1. Константные переменные

const double pi=3.1415; // нельзя изменять pi // pi=3.14156; // ошибка

double y=2 + pi; // так можно

//

//2. Указатель на константу:

//double * p=π // так нельзя, поскольку можем добраться до pi

const double * q= π//указали, что q не иcпользуется для изменения pi

double s=2; double * u=&s;

const double *t=&s;

cout<<"\n s="<<s<<" *t = "<<*t<<endl; *u=5;

cout<<"\n *u= "<<*u<<" *t = "<<*t<<endl;

s=100; // так можно

cout<<"\n s= "<<s<<" *t = "<<*t<<endl;

//*t=6;// а так нельзя - const запрещает изменять значение *t double yy=3;

t=&yy;

cout<<"\n yy="<<yy<<" *t = "<<*t<<endl;

//

// 3. Константный указатель: double x=3, v=5;

double * const pt = &x; // pt указывает только на x cout<<"\n *pt= "<< *pt<<" x= "<<x<<endl;

*pt=11;

cout<<"\n *pt= "<< *pt<<" x= "<<x<<endl;

//pt=&v; // этот оператор приведёт к ошибке

//

// 4. Константный указатель на константу double r =3.14156;

double rr =3.14;

const double * const pr=&r; cout<<"\n r="<<r<<" *pr= "<<*pr<<endl;

//*pr = 3.14; // Ошибка - изменять значение нельзя //pr = &rr; // Ошибка - изменять адрес нельзя

return 0;

}

Константные параметры функций

Если формальный аргумент объявлен неконстантным, то и фактический аргумент, используемый при вызове, обязан быть неконстантным.

Если формальный аргумент объявлен константным, то фактический может быть неконстантным.

// constexample2.cpp : Константы в функциях

//

#include "stdafx.h" #include <iostream> using namespace std;

void f1(double *p)

{

*p = 3.1415;

double pt=*p + 0.6e-4; cout<<"\n f1:pt= "<<pt<<endl;

}

void f2(const double *p)

{

//*p = 3.1415; // Ошибка - нельзя изменять значение double pt=*p + 0.6e-4;

cout<<"\n f2:pt= "<<pt<<endl;

}

void f3(const double &p)

{

//p = 3.1415; // Ошибка - нельзя изменять значение double pt=p + 0.6e-4;

cout<<"\n f3:pt= "<<pt<<endl;

}

int _tmain(int argc, _TCHAR* argv[])

{

double pp =3;

const double pi = 3.1415; const double *pq = &pp; f1(&pp); // Так можно

//f1(&pi);//Ошибка - нельзя преобразовать из const double в double

//f1(pq); //Ошибка - нельзя преобразовать из const double в double

f2(&pp); // Так можно f2(&pi); // Так можно f2(pq); // Так можно

f3(pp); // Так можно f3(pi); // Так можно return 0;

}

Соседние файлы в папке техпрог