
- •Базовые принципы объектно-ориентированного программирования.
- •Базовые конструкции объектно-ориентированных программ.
- •Конструктор и деструктор. Конструктор по умолчанию.
- •Конструктор копирования.
- •Конструктор explicit.
- •Указатель this.
- •Абстрактные типы данных.
- •Операторы для динамического выделения и освобождения памяти (new и delete).
- •Перегрузка и переопределение функций.
- •Перегрузка бинарных операторов.
- •Перегрузка унарных операторов.
- •19.20.Перегрузка оператора new.Перегрузка оператора delete.
- •22.Inline-функции.
- •23.Вложенные классы
- •24.Static-компоненты данные класса
- •25.26.Static и const-компоненты функции класса
- •27.Использование new delete для реализации массивов
- •28.Организация внешнего доступа к локальным компонентам класса(friend)
- •29.Ссылки.Параметры ссылки
- •30.Ссылки.Независимые ссылки
- •31.Инициализация компонент-данных объекта. Конструктор с параметрами.
- •33.Наследование. Открытое, защищенное и закрытое.
- •34.Виртуальные функции.
- •35.Множественное наследование.
- •36.Множественное наследование и виртуальные базовые классы
- •38.Proxi-классы.
- •39.40.Пространство имен. Пространство имен как объявление. Пространство имен как директива.
- •41.Виртуальные функции
- •42.Параметризированные классы (шаблоны).
- •43.Шаблоны функций.
- •44.Передача в шаблон класса дополнительных параметров.
- •44.Совместное использование шаблонов и наследования.
- •45.Шаблоны класса и friend.
- •46.Реализация smart-указателя.
- •48.Транзакции.
25.26.Static и const-компоненты функции класса
В С++ компоненты-функции могут использоваться с модификатором static и const. Обычная компонента-функция, вызываемая object . function(a,b); имеет явный список параметров a и b и неявный список параметров, состоящий из компонент данных переменной object. Неявные параметры можно представить как список параметров, доступных через указатель this. Статическая (static) компонента-функция не может обращаться к любой из компонент посредством указателя this. Компонента-функция const не может изменять неявные параметры. Основные свойства и правила использования static- и const-функций: - статические компоненты-функции не имеют указателя this, поэтому об-
ращаться к нестатическим компонентам класса можно только с использованием
. или ->; - не могут быть объявлены две одинаковые функции с одинаковыми име-
нами и типами аргументов, чтобы при этом одна была статической, а другая
нет; - статические компоненты-функции не могут быть виртуальными.
class static_func_demo
{static int i;
public:
static void init(int x) { i = x; }
void show() { cout « i; }
};
int static_func_demo: : i; // определение переменной i
int main ( )
{// инициализация статических данных еще до создания объекта
static_func_demo: : init (100) ;
static_func_demo x;
x.show(); // вывод на экран значения 100
return 0;
}
class cls
{ int kl; // количество изделий
double zp; // зарплата на производство одного изделия
double nl1,nl2; // два налога на з/пл
double sr; // количество сырья на производство одного изделия
static double cs; // цена сырья на одно изделие
public:
cls(){} // конструктор по умолчанию
~cls(){} // деструктор
void inpt(int);
static void vvod_cn(double);
double seb() const;
};
double cls::cs; // явное определение static-члена в контексте файла
void cls::inpt(int k)
{ kl=k;
cout << "Введите з/пл и 2 налога";
cin >> nl1 >> nl2 >> zp;
}
void cls::vvod_cn(double c)
{ cs=c; // можно обращаться в функции только к static-компонентам;
}
double cls::seb() const
{return kl*(zp+zp*nl1+zp*nl2+sr*cs);//в функции нельзя изменить ни один
} // неявный параметр (kl zp nl1 nl2 sr)
void main()
{ cls c1,c2;
c1.inpt(100); // инициализация первого объекта
c2.inpt(200); // инициализация второго объекта
cls::vvod_cn(500.); //
cout << "\nc1" << c1.seb() << "\nc2" << c2.seb() << endl;
}
class Demo
{mutable int i;
int j ;
public:
int geti ( } const
{return i; } // здесь все правильно
void seti(int x) const
{i = x; }// теперь все правильно
/*void setj (int x) const Если убрать комментарии вокруг этой функции, то программа
компилироваться не будет
{j = x; }// здесь прежняя ошибка
*/
int main()
{
Demo ob;
ob.seti(1900) ;
cout « ob . geti ( ) ;
return 0;