
техпрог / Comp-Sci-04
.pdf
Материалы к лекции 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;
}