继承

继承

这里写图片描述

在子类的外部只能访问父类的public成员,
在子类的内部可以访问类的protected和public。
protected成员可以被基类的所有的派生类使用,这一性质可以沿继承树无限循环

#include<iostream>
#include<string.h>
using namespace std;
class Father{
private:
    int money;
protected:
    int room_key;
public:
    void it_skill(void)
    {
        cout<<"father is it skill"<<endl;
    }
    int getMoney(void)
    {
        return money;
    }
    void setMoney(int money)
    {
       this->money=money;
    }
};
class Son:public Father{
private:
    int toy;
    using Father::it_skill;
public:
    using Father::room_key;
    void play_game(void)
    {
        int m;
        cout<<"son play game"<<endl;
        /*money-=1
        错,不能动直接拿父亲的私房钱
        */
        /*但是可以问他要*/
        m=getMoney();
        m--;
        setMoney(m);
        /*派生类可以访问*/
        room_key=1;
    }
};
int main()
{
   Son s;
   s.setMoney(10);
   cout<<s.getMoney()<<endl;
   s.it_skill();
   s.room_key=1;
   return 0;
}

多重继承

#include<iostream>
#include<string.h>
#include<unistd.h>
using namespace std;
class Furniture{
private:
    int weight;
public: 
    void setWeight(int weight){
        this->weight=weight;
    }
    int getWeight(void)const
    {
        return weight;
    }
};
class Sofa:virtual public Furniture
{   

public:
    void watchTV(void){
        cout<<"watch TV"<<endl;
    }   
};
class Bed:virtual public Furniture{
    public:
        void sleep(void){
            cout<<"sleep"<<endl;
        }
};
class Sofabed:public Sofa,public Bed{

};
int main(int argc,char *argv[])
{
    Sofabed s;
    s.sleep();
    s.watchTV();
    s.setWeight(100);
}

这里写图片描述

构造函数的顺序:

先父后儿
1.先调用基类的构造函数
1.1先虚拟基类
1.2先一般基类
2.自身
2.1先对象成员
2.2后自己
(虚拟基类构造函数只执行一次)

#include<iostream>
#include<string.h>
#include<unistd.h>
using namespace std;
class Furniture{
private:
    int weight;
public: 
    void setWeight(int weight){
        this->weight=weight;
    }
    int getWeight(void)const
    {
        return weight;
    }
    Furniture(){
        cout<<"Furniture()"<<endl;
    }
};
class Vertification3C{
    public:
    Vertification3C(){
        cout<<"Vertification3C()"<<endl;
    }

};
class Sofa:virtual public Furniture,virtual public Vertification3C
{   
    private:
        int a;
    public:
        void watchTV(void){
            cout<<"watchTV"<<endl;
        }
        Sofa(){
            cout<<"Sofa()"<<endl;
        }
};
class Bed:virtual public Furniture,virtual public Vertification3C{
    private:
        int b;
    public:
        void sleep(void){
            cout<<"sleep"<<endl;
        }
        Bed(){
            cout<<"Bed()"<<endl;
        }
};

class Sofabed:public Sofa,public Bed{
    private:
        int c;
    public:
    Sofabed(){
        cout<<"Sofabed()"<<endl;
    }

};
class LeftRightCom{
        public:
        LeftRightCom(){
            cout<<"LeftRightCOm()"<<endl;
        }

};
class Date{
    public:
        Date(){
            cout<<"Date()"<<endl;
        }
};
class Type{
    public:
        Type(){
            cout<<"Type()"<<endl; 
        }
};
class LeftRightSofabed:public Sofabed,public LeftRightCom{
    private:
        Date date;
        Type type;
    public:
        LeftRightSofabed(){
            cout<<"LeftRightSofabed"<<endl;
        }

};
int main(int argc,char *argv[])
{
    LeftRightSofabed s;
    return 0;

}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值