面向对象——继承、多态、方法重写、构造方法重载简单例子

说明:

这学期开了面向对象的课程,老师上星期布置了作业,之前用JAVA写了一遍,今天心血来潮又用C++写了一遍。博主只会敲代码,但面向对象是小白一个,欢迎交流学习。

题目:

C++代码:

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <string>
constexpr int MAX_LEN = 3;
class Animal{
private:
    int age;
    std::string color;
    std::string animalType = "未知种类的动物";
public:
    Animal() {

    }
    Animal(int age, std::string color){//重载构造函数
        this->age = age;
        this->color = color;
    }
    int getAge() const {
        return age;
    }
    void setAge(int age) {
        Animal::age = age;
    }
    const std::string &getColor() const {
        return color;
    }
    void setColor(const std::string &color) {
        Animal::color = color;
    }
    const std::string &getAnimalType() const {
        return animalType;
    }
    void setAnimalType(const std::string &animalType) {
        Animal::animalType = animalType;
    }
    virtual void eat(std::string something){
        std::cout << getAnimalType() << "吃" << something << '\n';
    }
};
class Cat: public Animal{
private:

public:
    Cat():Animal() {

    }
    Cat(int age, std::string color):Animal(age, color) {
        setAnimalType("猫");
    }
    void catchMouse() {
        std::cout << "猫抓老鼠" << '\n';
    }
    void eat(std::string something) override {
        std::cout << getAge() << "岁" << getColor() << "的猫眯着眼睛侧着头吃";
        std::cout << something << '\n';
    }
};
class Dog: public Animal{
private:

public:
    Dog():Animal() {

    }
    Dog(int age, std::string color):Animal(age, color) {
        setAnimalType("狗");
    }
    void lookHome() {
        std::cout << "狗看家" << std::endl;
    }
    void eat(std::string something) override {
        std::cout << getAge() << "岁的" << getColor() << "的狗两只前腿死死地抱住";
        std::cout << something << "猛吃\n";
    }
};
class Person{
private:
    std::string name;
    int age;
public:
    Person() {

    }
    Person(std::string name, int age) {
        this->name = name;
        this->age = age;
    }
    const std::string &getName() const {
        return name;
    }
    void setName(const std::string &name) {
        Person::name = name;
    }
    int getAge() const {
        return age;
    }
    void setAge(int age) {
        Person::age = age;
    }
    void keepPet(Animal &animal,std::string something) {
        std::cout << "年龄为" << getAge() << "岁的" << getName() << "养了一只";
        std::cout << animal.getColor() << "的" << animal.getAge() << "岁的";
        std::cout << animal.getAnimalType() << '\n';
        animal.eat(something);
    }
};
int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);
    Animal *animals[MAX_LEN];
    animals[0] = new Dog(2, "黑颜色");
    animals[1] = new Cat(3, "灰颜色");
    animals[2] = new Animal(4, "白颜色");

    Person *persons[MAX_LEN];
    persons[0] = new Person("老王", 30);
    persons[1] = new Person("老李", 25);
    persons[2] = new Person("老张", 40);

    persons[0]->keepPet(*animals[0], "骨头");
    persons[1]->keepPet(*animals[1], "鱼");
    persons[2]->keepPet(*animals[2], "肉");
    return 0;
}

输出:

相关推荐
香芋芋圆18 分钟前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
揽星河..1 小时前
【C语言】分支和循环
c语言·c++·算法
小熊恋旧1 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合1 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J1 小时前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
will_net1 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
晗夜未央2 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
熊猫钓鱼>_>2 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
Fuyo_11193 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
努力努力再努力wz3 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua