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;
}

运行结果:

相关推荐
此生只爱蛋9 分钟前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
blammmp17 分钟前
Java:数据结构-枚举
java·开发语言·数据结构
何曾参静谧29 分钟前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
暗黑起源喵35 分钟前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong40 分钟前
Java反射
java·开发语言·反射
Troc_wangpeng41 分钟前
R language 关于二维平面直角坐标系的制作
开发语言·机器学习
努力的家伙是不讨厌的43 分钟前
解析json导出csv或者直接入库
开发语言·python·json
Envyᥫᩣ1 小时前
C#语言:从入门到精通
开发语言·c#
童先生1 小时前
Go 项目中实现类似 Java Shiro 的权限控制中间件?
开发语言·go
lulu_gh_yu1 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法