Методы (функции-члены)
Часть раздела Объектно-ориентированное программирование путешествия по C++ на Coddy — урок 8 из 104.
Функции-члены определяют, что может делать объект. Они имеют тип возвращаемого значения, имя и необязательные параметры.
Метод, возвращающий значение
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
};Метод void (без возвращаемого значения)
class Printer {
public:
void printMessage(std::string msg) {
std::cout << msg << std::endl;
}
};Метод, возвращающий bool
class Checker {
public:
bool isPositive(int num) {
return num > 0;
}
};Объявление в заголовочном файле, реализация в файле исходного кода
// Calculator.h
class Calculator {
public:
int add(int a, int b);
};
// Calculator.cpp
int Calculator::add(int a, int b) {
return a + b;
}Тип возвращаемого значения указывается перед именем метода. Используйте void, когда метод ничего не возвращает. Оператор разрешения области видимости :: связывает реализации с их классом.
Задание
СреднеРеализуйте четыре функции-члена для класса StringHelper с различными типами возвращаемых значений и параметрами:
getLength()— возвращаетint, длину текстаtoUpperCase()— возвращаетstd::string, текст в верхнем регистреcontains(std::string word)— возвращаетbool, содержит ли текст указанное словоrepeat(int times)— возвращаетstd::string, текст, повторенный несколько раз через пробел
Шпаргалка
Функции-члены определяют, что может делать объект. У них есть тип возвращаемого значения, имя и необязательные параметры.
Метод, возвращающий значение:
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
};Метод void (без возвращаемого значения):
class Printer {
public:
void printMessage(std::string msg) {
std::cout << msg << std::endl;
}
};Метод, возвращающий bool:
class Checker {
public:
bool isPositive(int num) {
return num > 0;
}
};Объявление в заголовочном файле, реализация в исходном коде:
// Calculator.h
class Calculator {
public:
int add(int a, int b);
};
// Calculator.cpp
int Calculator::add(int a, int b) {
return a + b;
}Тип возвращаемого значения указывается перед именем метода. Используйте void, когда метод ничего не возвращает. Оператор разрешения области видимости :: связывает реализации с их классом.
Попробуйте сами
#include <iostream>
#include "StringHelper.h"
int main() {
std::string input;
std::getline(std::cin, input);
StringHelper helper;
helper.text = input;
std::cout << "Original: " << helper.text << std::endl;
std::cout << "Length: " << helper.getLength() << std::endl;
std::cout << "Uppercase: " << helper.toUpperCase() << std::endl;
std::cout << "Contains 'World': " << (helper.contains("World") ? "yes" : "no") << std::endl;
std::cout << "Repeated: " << helper.repeat(3) << std::endl;
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыСборка и компиляция C++Заголовочные файлы и файлы исходного кодаПространства имен и область видимостиВведение в ООП на C++Классы и объектыУказатель 'this'Методы (функции-члены)Атрибуты (члены данных)Основы конструкторов и деструкторовИтоги — Простой калькулятор4Свойства классов
Члены экземпляра против статическихГеттеры и сеттерыКонстантные функции-членыКлючевое слово mutableСтатические методы и переменныеДружественные функции и классыИтоги — Менеджер банковских счетов7Наследование
Основы наследованияУровни доступа при наследованииПорядок вызова конструкторов и деструкторовПереопределение методовВиртуальные функции и VTableМножественное наследованиеВиртуальное наследованиеИтоги — Иерархия сотрудников10Обзор STL
Обзор и философия STLКонтейнеры STLИтераторыАлгоритмы STLФункторы и лямбда-выраженияИтоги: частота слов13Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonFactory и Abstract FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy2Управление памятью
Стек и кучаУказатели и ссылкиДинамическая память (new/delete)Умные указатели в C++RAII в C++Итоги — Менеджер динамического массива5Инкапсуляция
Спецификаторы доступа в C++Спецификаторы доступа: подробный разборСокрытие данныхStruct против ClassВложенные и внутренние классыИтоги — Система учета студентов8Полиморфизм
Полиморфизм компиляции и времени выполненияПерегрузка функцийВиртуальные функции: повторениеЧистые виртуальные функцииАбстрактные классыПроектирование интерфейсов на C++Dynamic Casting и RTTIИтоги: Калькулятор фигур11Продвинутые концепции ООП
Композиция против наследованияМиксины через CRTPИдиома PimplСтирание типовEnum Classes и строгая типизацияОбработка исключений в ООППользовательские иерархии исключений14Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикRAII как паттерн3Конструкторы и деструкторы
Конструктор по умолчаниюПараметризованный конструкторКонструктор копированияКонструктор перемещенияСписки инициализации конструктораДелегирующие конструкторыГлубокое погружение в деструкторыПравило трех / пяти / нуляПовторение — класс String6Перегрузка операторов
Введение в перегрузку операторовПерегрузка арифметических операторовПерегрузка операторов сравненияОператоры потоковПерегрузка оператора присваиванияПерегрузка операторов [] и ()Операторы преобразования типовИтоги — класс Matrix9Шаблоны
Шаблоны функцийШаблоны классовСпециализация шаблоновВариативные шаблоныОсновы SFINAE и Type TraitsИтоги — Обобщенный контейнер