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

运行结果:

相关推荐
yaoxin5211238 分钟前
406. Java 文件操作基础 - 字符与二进制流
java·开发语言·python
江屿风14 分钟前
C++OJ题经验总结(竞赛)1
开发语言·c++·笔记·算法
运筹vivo@34 分钟前
LeetCode 2405. 子字符串的最优划分
c++·算法·leetcode·职场和发展·哈希表
有点。1 小时前
C++(枚举法一练习题)
开发语言·c++·算法
Klong.k1 小时前
如何避免Bean的线程安全问题
java·开发语言
basketball6161 小时前
C++ 单例模式完全指南:从饿汉式到现代 C++ 的最佳实践
java·c++·单例模式
接着奏乐接着舞1 小时前
【无标题】
开发语言·前端·javascript
iiiiyu1 小时前
集合进阶(Map集合)
java·大数据·开发语言·数据结构·编程语言