Министерство высшего и среднего специального образования республики узбекистана
Download 164.64 Kb.
|
ООП
- Bu sahifa navigatsiya:
- Группы: 1-2ПМИ-19. САМОСТОЯТЕЛЬНЫХ РАБОТ ПО ДИСЦИПЛИНЕ “ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ”
- Тема: Статические элементы класса. Статические функции-элементы. Константные объекты и константные функции-элементы. Операции класса new и delete. План
- Статические элементы класса Структуры Константные объекты и константные функции-элементы
МИНИСТЕРСТВО ВЫСШЕГО И СРЕДНЕГО СПЕЦИАЛЬНОГО ОБРАЗОВАНИЯ РЕСПУБЛИКИ УЗБЕКИСТАНА БУХАРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Группы: 1-2ПМИ-19. САМОСТОЯТЕЛЬНЫХ РАБОТ ПО ДИСЦИПЛИНЕ “ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ” Студенты: __________ Ярашев Н. Преподаватель: __________ Атаева Г. Тема: Статические элементы класса. Статические функции-элементы. Константные объекты и константные функции-элементы. Операции класса new и delete. План: Статические элементы класса Структуры Константные объекты и константные функции-элементы Операции класса new и delete Кроме переменных и методов, которые относятся непосредственно к объекту, C++ позволяет определять переменные и методы, которые относятся непосредственно к классу или иначе говоя статические члены класса. Статические переменные и методы относят в целом ко всему классу. Для их определения используется ключевое слово static. Например, в банке может быть множество различных вкладов, однако все вклады будут иметь какие-то общие процентные ставки. Так, для описания банковского счета определим и используем следующий класс: #include class Account { public: Account(double sum) { this->sum = sum; } static int getRate() { return rate; } static void setRate(int r) { rate = r; } double getIncome() { return sum + sum * rate / 100; } private: double sum; static int rate; }; int Account::rate = 8; int main() { Account account1(20000); Account account2(50000); Account::setRate(5); // переустанавливаем значение rate std::cout << "Rate: " << Account::getRate() << std::endl; std::cout << "Rate: " << account1.getRate() << " Income: " << account1.getIncome() << std::endl; std::cout << "Rate: " << account2.getRate() << " Income: " << account2.getIncome() << std::endl; return 0; } В классе Account определена одна статическая переменная rate и две статических функции для управления этой переменной. При определении статических функций стоит учитывать, что внутри них мы можем использовать только статические переменные класса, как например, переменную rate. Нестатические переменные использовать в статических функциях нельзя. Кроме того, в статических функциях нельзя использовать указатель this, что в принципе и так очевидно, так как this указывает на текущий объект, а статические функции относятся вцелом ко всему классу. Также важно, что если класс содержит статические переменные, то они должны быть дополнительно определены вне класса: int Account::rate = 8; Присваивать начальное значение переменной необязательно. Также стоит отметить, что так как статические члены относятся в целом ко всему классу, то для обращения к статическим членам используется имя класса, после которого идет оператор ::. Либо мы можем также обращаться к публичным членам класса через переменные данного класса: Account::getRate() account1.getRate() Консольный вывод программы: Rate: 5 Rate: 5 Income: 21000 Rate: 5 Income: 52500 Также нередко в классах используют статические константы. Например, сделаем в классе Account переменную rate константой: #include class Account { public: const static int rate = 8; Account(double sum) { this->sum = sum; } double getIncome() { return sum + sum * rate / 100; } private: double sum; }; int main() { Account account1(20000); Account account2(50000); std::cout << "Rate: " << account1.rate << "\tIncome: " << account1.getIncome() << std::endl; std::cout << "Rate: " << account2.rate << "\tIncome: " << account2.getIncome() << std::endl; return 0; } В отличие от статических переменных статические константы не нужно дополнительно определять вне класса. Download 164.64 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling