C++面向对象(二)继承、派生

一、介绍

二、名称说明
继承:就是将之前做好的类功能复制过来,不用重复再去实现
派生:把继承类,然后添加新的功能生成的新类过程称为派生
基类:被继承的类为基类
派生类:生成的新类为派生类

三、继承示例:
1、编写基类

//定义类 基类
class Box{
    public://后面的成员可以被外面使用
        int len;
        int weight;
        int height;
        int get_v();
        void set( int lenghth, int bre, int hei);
    private://后面的成员不能被外面使用,默认为此成员,外面访问会报错
        int test1;
        int set_test1(int x){test1 = x;}
        int get_test1(){return test1;}
    protected://保护成员,外面访问会报错
        int test2;
};

int Box::get_v()
{
    int ret = len * weight * height;

    return ret; 
}

void Box::set( int lenghth, int bre, int hei)
{
    len = lenghth;
    weight = bre;
    height = hei;
}

2、继承
class derived-class: access-specifier base-class

//定义类 派生类
class GiftBox:public Box//公有继承 基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问
{
    public://后面的成员可以被外面使用
        int play_music(){cout << "music played"<<"\n";}
 
    private://后面的成员不能被外面使用,默认为此成员,外面访问会报错

    protected://保护成员,外面访问会报错

};

3、创建对象

//定义对象
    GiftBox giftbox;
    int v;
    giftbox.set(1,2,3);
    
    v = giftbox.len * giftbox.height * giftbox.weight;
    cout << "giftbox 体积:" << v <<endl;
    giftbox.play_music();

4、完整代码

#include<iostream>

using namespace std;//使用标准输入输出
/*加了直接使用cout作为标准输出,不加这行输出得用std::cout*/

//定义类 基类
class Box{
    public://后面的成员可以被外面使用
        int len;
        int weight;
        int height;
        int get_v();
        void set( int lenghth, int bre, int hei);
    private://后面的成员不能被外面使用,默认为此成员,外面访问会报错
        int test1;
        int set_test1(int x){test1 = x;}
        int get_test1(){return test1;}
    protected://保护成员,外面访问会报错
        int test2;
};

int Box::get_v()
{
    int ret = len * weight * height;

    return ret; 
}

void Box::set( int lenghth, int bre, int hei)
{
    len = lenghth;
    weight = bre;
    height = hei;
}
//定义类 派生类
class GiftBox:public Box//公有继承 基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问
{
    public://后面的成员可以被外面使用
        int play_music(){cout << "music played"<<"\n";}
 
    private://后面的成员不能被外面使用,默认为此成员,外面访问会报错

    protected://保护成员,外面访问会报错

};

int main()
{
    //定义对象
    GiftBox giftbox;
    int v;
    giftbox.set(1,2,3);
    
    v = giftbox.len * giftbox.height * giftbox.weight;
    cout << "giftbox 体积:" << v <<endl;
    giftbox.play_music();
   
    return 0;
}

5、编译执行
在这里插入图片描述
四、继承类型
公有继承(public):基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 基类的公有和保护成员将成为派生类的保护成员。
私有继承(private):基类的公有和保护成员将成为派生类的私有成员。

五、多重继承
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

六、继承的析构、构造、和重载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值