3.18_C++_day6_作业

作业要求:

程序代码:

cpp 复制代码
#include <iostream>

using namespace std;


class Animal
{
private:
    string name;
    string color;
    int *age;
public:
    //无参构造函数
    Animal()
    {
        cout << "Animal::无参构造函数" << endl;
    }
    //有参构造函数
    Animal(string name,string color,int age):name(name),color(color),age(new int(age))
    {
        cout << "Animal::有参构造函数" << endl;
    }
    //析构函数
    ~Animal()
    {
        delete age;
        cout << "Animal::析构函数" << endl;
    }
    //拷贝构造函数
    Animal(const Animal &other):name(other.name),color(other.color),age(new int(*other.age))
    {
       cout << "Animal::拷贝构造函数" << endl;
    }
    //拷贝赋值函数
    Animal &operator=(const Animal &other)
    {
        if(this !=&other)
        {
            name = other.name;
            color = other.color;
            age = new int(*other.age);
        }
        cout << "Animal::拷贝赋值函数" << endl;
        return *this;
    }

};
class Dog:public Animal
{
private:
    int *legs;
public:
    //无参构造函数
    Dog()
    {
         cout << "Dog::无参构造" << endl;
    }
    //有参构造函数
    Dog(int legs,string name,string color,int age):Animal(name,color,age),legs(new int(legs))
    {
        cout << "Dog::有参构造函数" << endl;
    }
    //析构函数
    ~Dog()
    {
        delete legs;
        cout << "Dog::析构函数" << endl;
    }
    //拷贝构造函数
    Dog(const Dog &other):Animal(other),legs(new int(*other.legs))
    {
        cout << "Dog::拷贝构造构造" << endl;
    }
    //拷贝赋值函数
    Dog &operator=(const Dog &other)
    {
        if(this != &other)
        {
            Animal::operator=(other);
            legs = new int(*other.legs);
        }
        cout << "Dog::拷贝赋值函数" << endl;
        return *this;
    }
    void speak()
    {
        cout << "汪汪汪" << endl;
    }
};
int main()
{
    Dog d1;//实例化d1对象 不初始化 走无参构造
    Dog d2(4,"xiaohuang","yellow",3);//实例化d2 并初始化
    Dog d3(d2);//实例化d3 并使用d2给其初始
    d1 = d3;  //将d3 赋值给d1
    d1.speak();
    d2.speak();
    d3.speak();
    return 0;
}

运行结果:

作业要求:

程序代码:

cpp 复制代码
#include <iostream>

using namespace std;

//封装一个 讲解动物 类
class Animal
{
public:
    Animal(){}
    virtual void perform() = 0;
};


//封装一个 狮子 类 公有继承Animal
class Lion:public Animal
{
private:
    string name;
public:
    Lion(){}
    Lion(string name):name(name){}
    //重写虚函数
    void perform()
    {
        cout << name << ":跳舞" << endl;
    }
};
//封装一个 大象 类 共有继承Animal
class Elephant:public Animal
{
private:
    string name;
public:
    Elephant() {}
    Elephant(string name):name(name)
    {}
    //重写虚函数
    void perform()
    {
        cout << name << ":唱歌" << endl;
    }
};


//封装一个 猴子 类 共有继承Animal
class Monkey:public Animal
{
private:
    string name;
public:
    Monkey(){}
    Monkey(string name):name(name){}
    //重写虚函数
    void perform()
    {
        cout << name << ":杂耍" << endl;
    }
};


int main()
{
    //狮子类实例化一个对象 并初始化
    Lion l1("狮子");
    //使用基类指针 指向狮子子类对象l1
    Animal *p =&l1;
    p->perform();//展开狮子子类功能


    //大象类实例化对象
    Elephant e1("大象");
    p = &e1;
    p->perform();


    //猴子实例化对象
    Monkey m1("猴子");
    p = &m1;
    p->perform();

    return 0;
}

运行结果:

相关推荐
星释几秒前
Rust 练习册 88:OCR Numbers与光学字符识别
开发语言·后端·rust
一生要强的ymy1 分钟前
Polar PHP是世界上最好的语言(困难)
开发语言·php
我命由我123451 小时前
Java NIO 编程 - NIO Echo Server、NIO Client(NIO 异步客户端、NIO Selector 异步客户端)
java·开发语言·网络·java-ee·intellij-idea·intellij idea·nio
前端炒粉2 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
星释3 小时前
Rust 练习册 75:ETL与数据转换
开发语言·rust·etl
happyjoey2173 小时前
使用Qt自带的Maintenance Tool将Qt6.9升级为QT6.10
开发语言·qt
p***h6437 小时前
JavaScript在Node.js中的异步编程
开发语言·javascript·node.js
散峰而望7 小时前
C++数组(二)(算法竞赛)
开发语言·c++·算法·github
Porunarufu7 小时前
Java·关于List
java·开发语言
子不语1808 小时前
Python——函数
开发语言·python