Вопрос:
Напиши программу на C++, в которой будут задействованы основные концепции объектно-ориентированного программирования
Ответ ассистента
Конечно, вот пример программы на C++, демонстрирующей основные концепции объектно-ориентированного программирования (ООП):
```cpp
include include// 1. Инкапсуляция: Класс "Animal" объединяет данные (name, breed) и методы (get/set) для работы с ними. class Animal { private: std::string name; std::string breed;
public: // Конструктор класса Animal(std::string name, std::string breed) : name(name), breed(breed) {}
// Методы доступа к приватным данным (геттеры) std::string getName() const { return name; } std::string getBreed() const { return breed; } // Методы изменения приватных данных (сеттеры) void setName(std::string name) { this->name = name; } void setBreed(std::string breed) { this->breed = breed; } // Виртуальный метод, который будет переопределен в производных классах (для полиморфизма) virtual void makeSound() const { std::cout << "Generic animal sound" << std::endl; } // Метод для вывода информации о животном void printInfo() const { std::cout << "Name: " << name << ", Breed: " << breed << std::endl; }};
// 2. Наследование: Класс "Dog" наследует свойства и методы класса "Animal". class Dog : public Animal { private: std::string color;
public: // Конструктор класса "Dog" вызывает конструктор базового класса "Animal" Dog(std::string name, std::string breed, std::string color) : Animal(name, breed), color(color) {}
// Переопределение виртуального метода "makeSound" (полиморфизм) void makeSound() const override { std::cout << "Woof!" << std::endl; } // Дополнительный метод, специфичный для класса "Dog" void wagTail() const { std::cout << "Wagging tail" << std::endl; } void printInfo() const { Animal::printInfo(); // Вызов метода базового класса std::cout << "Color: " << color << std::endl; }};
// 2. Наследование: Класс "Cat" наследует свойства и методы класса "Animal". class Cat : public Animal { public: // Конструктор класса "Cat" вызывает конструктор базового класса "Animal" Cat(std::string name, std::string breed) : Animal(name, breed) {}
// Переопределение виртуального метода "makeSound" (полиморфизм) void makeSound() const override { std::cout << "Meow!" << std::endl; }};
int main() { // Создание объектов классов Animal animal("Generic Animal", "Unknown"); Dog dog("Buddy", "Golden Retriever", "Golden"); Cat cat("Whiskers", "Siamese");
// 3. Полиморфизм: Вызов метода "makeSound" для разных объектов приводит к разному поведению. animal.makeSound(); // Вывод: Generic animal sound dog.makeSound(); // Вывод: Woof! cat.makeSound(); // Вывод: Meow! // Вывод информации о животных animal.printInfo(); dog.printInfo(); cat.printInfo(); // Пример использования метода, специфичного для класса "Dog" dog.wagTail(); // Вывод: Wagging tail return 0;} ```
Пояснения к коду:
- Инкапсуляция: Класс Animal объединяет данные (name, breed) и методы для работы с ними. Данные объявлены как private, что означает, что они доступны только внутри класса. Для доступа к данным используются методы getName, getBreed, setName, setBreed.
- Наследование: Классы Dog и Cat наследуют свойства и методы класса Animal. Это означает, что они автоматически получают все атрибуты и функции, определенные в Animal.
- Полиморфизм: Виртуальная функция makeSound определена в классе Animal и переопределена в классах Dog и Cat. Когда вызывается animal->makeSound(), вызывается версия функции, соответствующая фактическому типу объекта, на который указывает animal.
В этой программе продемонстрированы основные принципы ООП: инкапсуляция, наследование и полиморфизм.
Другие решения
Что ещё задавали пользователи
-
16. Обведите в каждом ряду слова, которые изменяются по родам, числам и падежам:
Показать ответ -
Read and write. 1 A: When does Lulu go to Maya's house? B: On Saturdays.
Показать ответ -
Выделите в каждом ряду разносклоняемые существительные
Показать ответ -
2. What does the doctor assistant do?
Показать ответ -
Расставьте, где необходимо, знаки препинания. Укажите, какими членами предложения являются однородные члены.
Показать ответ -
Вычисли: 12 + 79.
Показать ответ -
Read the sentences. Circle the correct answer a, b or c.
Показать ответ -
1. Как приготовить 200 мл 15% раствора поваренной соли? Приведите все расчёты и поэтапно опишите процесс приготовления раствора.
Показать ответ -
1. 7 1/4 + 3 5/6
Показать ответ -
8. Выделите прилагательное, которому свойственны степени сравнения и краткая форма:
Показать ответ