- •Конструкторы и перегрузка операций
- •Введение
- •Лабораторная работа № 1. Конструкторы
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Int hours, minutes, seconds; // закрытые поля
- •Int getDigitByPosition(int pos); // возврат цифры числа по позиции
- •Int transferTo10(); // перевод в десятичную систему счисления
- •Void transferFrom10(int numb); // перевод из десятичной системы счисления
- •Int p_number_class::getDigitByPosition(int pos) {
- •Int p_number_class::transferTo10() {
- •Void p_number_class::transferFrom10(int numb) {
- •Int main(int argc, char* argv[])
- •Лабораторная работа № 2. Перегрузка операций
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Void print(const Week &d) // вывод на экран названий дней недели
- •Int denum; // поля - открыты
- •Void reduce(); // метод - открыт
- •Int getDigitByPosition(int pos); // возврат цифры числа по позиции
- •Int transferTo10(); // перевод в десятичную систему счисления
- •Void transferFrom10(int numb); // перевод из десятичной системы счисления
- •Int p_number_class::getDigitByPosition(int pos) {
- •Int p_number_class::transferTo10() {
- •Void p_number_class::transferFrom10(int numb) {
- •Int main(int argc, char* argv[])
- •Библиографический список
Выполнение лабораторной работы
Для выполнения работы необходимо:
формализовать задачу;
составить описание класса;
составить алгоритм для каждого метода, описанного в классе, и определить все методы;
создать объекты описанного типа;
разработать набор тестов, на которых будет проверяться программа;
продемонстрировать работу программы на наборе тестов;
оформить работу и отчитаться по ней.
Методические указания к выполнению лабораторной работы
Задание
Реализовать класс натуральное число в Р-ичной системе счисления (2 < Р < 9). Класс должен содержать методы:
конструктор без аргументов, конструктор инициализации и конструктор по умолчанию;
сложение; вычитание; умножение; деление;
функции, реализующие операции отношения (равно, не равно, больше, меньше).
Выполнение
Конструкторы позволяют сделать форму инициализации пользовательских классов аналогичной встроенным типам.
Конструктор – это особый метод, имеющий имя, совпадающее с именем класса. Назначением конструктора является создание и инициализация объекта.
Аргументы конструктора обычно используются для инициализации полей объекта. Количество и типы аргументов конструктора могут быть любыми. Разрешается присваивать аргументам значения по умолчанию.
Конструктор не возвращает результата – недопустимо писать даже void.
Заголовок конструктора, реализуемого вне класса, как и для обычного метода, должен сопровождаться префиксом:
Наименование_класса::Наименование_класса(параметры)
Конструкторы можно перегружать. Различают следующие виды конструкторов:
- конструктор без аргументов (конструктор по умолчанию);
- конструктор инициализации;
- конструктор копирования (с одним параметром определяемого класса).
При отсутствии в классе явно определенных конструкторов автоматически создаются конструктор без аргументов (конструктор по умолчанию) и конструктор копирования. Создаваемый автоматически конструктор без аргументов имеет вид:
Наименование_класса::Наименование_класса (){}
Конструктор копирования автоматически создается в таком виде:
Наименование_класса::Наименование_класса(const Наименование_класса &r) { *this = r; }
Аргументом конструктора копирования всегда является объект своего класса.
Эти конструкторы обеспечивают объявление объектов без инициализации и с инициализацией другим объектом того же типа:
date d; // конструктор без аргументов
date t(d); // конструктор копирования
date z = d; // конструктор копирования
При наличии хотя бы одного явно определенного конструктора конструктор без аргументов не создается. Конструктор копирования создается всегда, если не определен явно.
При явном определении конструктора копирования аргумент должен передаваться по ссылке – передавать его по значению нельзя. В классе может быть объявлено несколько конструкторов копирования и разрешается определять несколько аргументов, если им присваиваются значения по умолчанию. Любой конструктор с параметрами не своего класса является конструктором инициализации. Конструктор инициализации предназначен для инициализации полей класса.
class time {
public:
time(); // конструктор без аргументов
// конструктор инициализации
time(int h, int m = 0, int s = 0) : hours(h), minutes(m), seconds(s)
{}
private:
