- •2. Перегрузка функций.
- •4. Использование операторов new и delete.
- •5. Понятие классов и экземпляров классов.
- •6. Описание классов(class, struct).
- •7. Вложенные классы.
- •8. Определение объектов при помощи классов.
- •9. Конструкторы и деструкторы классов.
- •10. Атрибуты доступа к компонентам классов.
- •12. Вызов членов класса.
- •13. Перегрузка конструкторов.
- •11. Объявление и определение методов класса.
- •14. Перегрузка операторов отношения.
- •15. Перегрузка логических операторов.
- •16. Перегрузка унарных операторов.
- •17. Перегрузка бинарных операторов.
- •18. Функция оператор как член класса.
- •19. Доступ к компонентам классов в зависимости от атрибутов доступа.
- •20. Введение в наследование. Базовые классы.
- •21. Производные классы.
- •22. Ограничение доступа к элементам класса.
- •23. Конструкторы базовых и производных классов.
- •24. Виртуальные базовые классы. Чисто виртуальные функции.
- •25. Использование указателей на базовые классы и производные классы. Виртуальные методы.
- •26. Потоки ввода-вывода. Понятие потока.
- •27. Иерархия классов ввода-вывода. Основные уровни иерархии. Классы потоков.
- •28. Стандартные классы, объекты и механизмы консольного ввода/вывода.
- •29. Стандартные классы, объекты и механизмы файлового ввода/вывода.
- •30. Файлы последовательного доступа и произвольного доступа.
- •31. Основы обработки исключений в с#. Генерация исключений.
- •32. Файлы последовательного доступа и произвольного доступа.
- •34. Основы обработки исключений в с#. Генерация исключений.
11. Объявление и определение методов класса.
Синтаксис объявления методов соответствует тому, что вы могли ожидать от С-подобного языка, и почти идентичен синтаксису С++ и Java. Основное синтаксическое отличие от С++ заключается в том, что в С# каждый метод отдельно объявлен как общедоступный или приватный.
Невозможно использовать блоки public: для группировки нескольких определений методов. К тому же все методы С# объявляются и определяются в определении класса. В С# нет возможности отделить реализацию метода, как это делается в С++.
На С# определение метода состоит из любых модификаторов (таких как специфи¬кация доступности), типа возвращаемого значения, за которым следует имя метода, затем — список аргументов, заключенный в скобки, и далее — тело метода, заключенное в фигурные скобки:
[модификаторы] тип_возврата ИмяМетода ( [параметры] ){// Тело метода }
Каждый параметр состоит из имени типа параметра и имени, по которому к нему можно обратиться в теле метода. Также, если метод возвращает значение, то оператор возврата должен быть использован вместе с возвращаемым значением для указания точки выхода. Например:
public bool IsSquare(Rectangle rect) {
return (rect.Height == rect.Width);}
Этот код использует один из базовых классов .NET, System. Drawing.Rectangle, представляющий прямоугольники.
Если метод не возвращает ничего, то в качестве типа возврата указывается void, поскольку вообще опустить тип возврата невозможно. Если же он не принимает аргументов, то все равно после имени метода необходимо указать пустые скобки (как в случае метода Main ()). При этом включать оператор возврата не обязательно — метод возвращает управление автоматически по достижении закрывающей фигурной скобки. Заметим, что метод может содержать столько операторов возврата, сколько тре¬буется:
public bool IsPositive(int value) {if (value < 0) return false;return true;}
12. Вызов членов класса.
В классах и структурах есть члены, представляющие их данные и поведение. Члены класса включают все члены, объявленные в этом классе, а также все члены (кроме конструкторов и деструкторов), объявленные во всех классах в иерархии наследования данного класса. Закрытые члены в базовых классах наследуются, но недоступны из производных классов.
В следующей таблице перечислены виды членов, которые могут содержаться в классе или в структуре : поля, константы, свойства, методы, события, операторы, индексаторы, конструкторы, деструкторы, вложенные типы.
13. Перегрузка конструкторов.
Как и методы, конструкторы также могут перегружаться. Это дает возможность конструировать объекты самыми разными способами:
Одна из самых распространенных причин для перегрузки конструкторов заключается в необходимости предоставить возможность одним объектам инициализировать другие, наподобие того, как в предыдущем примере инициализируются поля класса.
Когда приходится работать с перегружаемыми конструкторами, то иногда очень полезно предоставить возможность одному конструктору вызывать другой. В C# это дается с помощью ключевого слова this. Ниже приведена общая форма такого вызова: имя_конструктора(список_параметров1) :this(список_параметров2) {// ... Тело конструктора, которое может быть пустым}
В исходном конструкторе сначала выполняется перегружаемый конструктор, список параметров которого соответствует критериюсписок_параметров2, а затем все остальные операторы, если таковые имеются в исходном конструкторе.
