}
В этом примере приведен конструктор инициализации. Он может инициализировать только нестатический элемент данных y. Статическая функция-элемент f_stat() обрабатывает статический элемент данных x. При попытке ввода нестатического элемента данных yего значение не изменится. Статическая функция-элемент не обрабатывает нестатические элементы данных. Зато нестатическая функция-элемент f_non_stat() может осуществлять ввод статического элемента данных x. Если при описании класса приведен прототип статической функции - члена, а сама функция определена позже, то ключевое слово static следует ставить только перед прототипом.
Ранее были рассмотрены const элементы-данные. Для их инициализации в конструкторе употреблялся список инициализации. Например:
class coord
{
const int x, y;
public:
coord (int a, int b): x(a), y(b)
{
}
};
Сейчас речь пойдет не об элементах-данных, а о константных объектах и константных элементах-функциях.
Константные объекты нужны в тех случаях, когда их применяют только для чтения. Изменять их значения нельзя принципиально. И чтобы не сделать это в программе случайно,для работы с константными объектами применяют константные функции-элементы. Эти функциине могут реализовать операцию присваивания элементам-данным константных объектов новых значений. Поэтому константные объекты могут работать (вызывать, связываться) только с константными элементами-функциями. Хотя сами константные функции могут вызываться и неконстантными объектами.
Перед константным объектом пишется ключевое слово с onst. Например:
class A
{
===========
};
void main ( )
{
constAw ; //w- константный объект
}
Константная функция-элемент выглядит так:
classA
{
===========
public:
тип_результатаимя_функции (параметры)const
{
===========
}
};
Пример.
#include <stdio.h>
class A
{
int x, y;
public:
A ( )
{
}
A (int a, int b)
{
x=a;
y=b;
}
//Сейчас будет попытка выполнить недопустимое присвоение в
// константной функции
void p_const ( ) const
{
x=12; // Cannot modify a const object
y=15; // Cannot modify a const object
}
//Далее эти же действия выполняет неконстантная функция
void p_non_const ( )
{
x=12;
y=15;
}
};
void main ( )
{
const A w(1,2);
//w- константный объект
Aq ; //q- неконстантный объект
w . p _ const( ); // Разрешается
q . p _ const( ); // Разрешается
w . p _ non_const( ); // Warning: non-const
// function A::p_non_const ( ) called for
// const object. Это сообщение будет независимо от того
// есть ли недопустимое присвоение в p_non_const ( ) или нет.
}
Внимание!Константная функция не может включать операцию присвоения для элементов-данных. Нельзя присвоить х=12; у=15, как это показано в примере. Но обнаруживается, что компилятор "не замечает", если в константной функции ввести новые значения элементов-данных для константного объекта. Так, например, в константной функции p _ const( ) можно сделать так:
void p_const ( ) const
{
puts (" Введите х, в ");
scanf ("%i%i", &x, &y);
}
Нередко несколько классов могут иметь одинаковые элементы данных. Например, class student,class teacher, class officer должны иметь такие элементы-данные, как имя, адрес, возраст. В этом случае удобно сделать т.н. базовый класс class man, у которого будут перечисленные общие для нескольких классов элементы данных, а также необходимые члены-функции. А у этого базового класса будут производные от него классы: class student,class teacher, class officer. Эти классы будут использовать элементы базового класса и, кроме этого, иметь свои собственные элементы данных и элементы-функции.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.