12/04

#include <iostream>

using namespace std;

class Sofa
{
private:
    string * sit;
public:
    Sofa(){cout << "sofa::无参构造函数" << endl;}
    Sofa(string sit):sit(new string(sit))
    {
        cout << "sofa::有参构造函数" << endl;
    }

    Sofa(const Sofa &other):sit(new string(*(other.sit)))
    {
         cout << "sofa::拷贝构造函数" << endl;
    }
    Sofa & operator=(const Sofa &other)
    {
        if(this != &other)
        {
            sit=new string(*(other.sit));
        }
         cout << "sofa::拷贝赋值函数" << endl;
    }
    ~Sofa()
    {
        cout << "sofa::析构函数" << endl;
        delete sit;
    }
    void show()
    {
        cout << "Sofa::sit:" << *sit <<endl;
    }
};

class Bed
{
private:
    string * sleep;
public:
    Bed(){cout << "Bed::无参构造函数" << endl;}
    Bed(string sleep):sleep(new string(sleep))
    {
        cout << "Bed::有参构造函数" << endl;
    }

    Bed(const Bed &other):sleep(new string(*(other.sleep)))
    {
         cout << "Bed::拷贝构造函数" << endl;
    }
    Bed & operator=(const Bed &other)
    {
        if(this != &other)
        {
            sleep=new string(*(other.sleep));
        }
         cout << "Bed::拷贝赋值函数" << endl;
    }
    ~Bed()
    {
        cout << "Bed::析构函数" << endl;
        delete sleep;
    }
    void show()
    {
        cout << "Bed::sleep:" << *sleep <<endl;
    }
};

class Sofabed:public Sofa,public Bed
{
private:
    string *color;
public:
    Sofabed(){cout << "Sofabed::无参构造函数" << endl;}
    Sofabed(string sit,string sleep,string color):Sofa(sit),Bed(sleep),color(new string(color))
    {
        cout << "Sofabed::有参构造函数" << endl;
    }
    Sofabed(const Sofabed &other):Sofa(other),Bed(other),color(new string (*(other.color)))
    {
        cout << "Sofabed::拷贝构造函数" << endl;
    }
    Sofabed & operator=(const Sofabed &other)
    {
        if(this != &other)
        {
            color=new string (*(other.color));
            Sofa::operator=(other);
            Bed::operator=(other);
        }
        cout << "Sofabed::拷贝赋值函数" << endl;
    }
    ~Sofabed()
    {
        delete color;
       // Sofa::~Sofa();
       // Bed::~Bed();
        cout << "Sofabed::析构构造函数" << endl;
    }
    void show()
    {
         Sofa::show();
         Bed::show();
         cout << "Sofabed::color:" << *color <<endl;
    }

};

int main()
{
    cout << "___________________________________________" << endl;
    Sofa s1;
    Sofa s2("可坐属性");
    s2.show();
    cout << "___________________________________________" << endl;
    Bed b1;
    Bed b2("可睡觉属性");
    b2.show();
     cout << "___________________________________________" << endl;
    Sofabed s_b1;
    Sofabed s_b2("可坐属性","可睡觉属性","颜色属性");
    s_b2.show();
    s_b2.Sofa::show();
    s_b2.Bed::show();
     cout << "___________________________________________" << endl;
    return 0;
}

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值