四、C++ 类的继承

一、引言

1.1 类成员的三种类型

我们知道,在类中一共有三种类型,分别为public,private和protected,默认为private,在结构中,默认是public

1.2 访问控制和继承

在这里插入图片描述

可见,在一个类中,只有类内的成员才可以访问private

二、类的继承

2.1 格式

继承允许我们依据一个类来创建一个类,这个已有的类称为基类,新创建的类称为派生类

class derived-class: access-specifier base-class1,access-specifier class2 ......

2.2 继承类型

  • 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
  • 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
  • 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
  • 代码实现:
    #include <iostream>
    
    using namespace std;
    
    // 定义基类
    class Student
    {
    public:
        char name;
    
    private:
        int age;
    
    protected:
        double height;
    };
    //
    // public继承:可以访问public,portected
    // public-->public
    // protected-->protected
    class Public : public Student
    {
    public:
        void set_name(char name);
        char get_name(void);
    };
    
    void Public::set_name(char na)
    {
        name = na;
    }
    
    char Public::get_name()
    {
        return name;
    }
    //
    
    // private继承:可以访问public,portected
    // public-->private
    // protected-->private
    class Private : private Student
    {
    public:
        void set_name(char name);
        char get_name(void);
    };
    
    void Private::set_name(char na)
    {
        name = na;
    }
    
    char Private::get_name()
    {
        return name;
    }
    /
    // protected继承可以访问public,portected
    // public-->portected
    // protected-->portected
    class Protect : protected Student
    {
    public:
        void set_height(double hei);
        double get_height(void);
    
    };
    
    void Protect::set_height(double hei){
        height = hei;
    }
    
    double Protect::get_height(void){
        return height;
    }
    
    ///
    int main()
    {
        Public student1;
        student1.set_name('a');
        cout << "name of student1:" << student1.get_name() << endl;
    
        Private student2;
        student2.set_name('b');
        cout << "name of student2:" << student2.get_name() << endl;
    
        Protect student3;
        student3.set_height(30.0);
        cout<<"height of student3:"<< student3.get_height()<<endl;
    
    }
    
  • 运行结果:
    name of student1:a
    name of student2:b
    height of student3:30
    

三、多继承

有时候,一个派生类可以从多个基类中继承,这种继承方式称为多继承

  • 格式:
    class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,{
    <派生类类体>
    };
    
  • 代码实现:
    #include <iostream>
    
    using namespace std;
    
    // 基类1
    class Shape
    {
    public:
        void set(double w, double h);
    
    protected:
        double height;
        double weight;
    };
    
    void Shape::set(double w, double h)
    {
        height = h;
        weight = w;
    }
    
    // 基类2
    
    class Cost
    {
    public:
        double cost(double area);
    };
    
    double Cost::cost(double area)
    {
        return area * 100;
    }
    // 派生类
    class Rectangle : public Shape, public Cost
    {
    public:
        double get_area();
    };
    
    double Rectangle::get_area()
    {
        return height * weight;
    }
    
    int main()
    {
        Rectangle rec;
        rec.set(20.333, 2.22323);
        double area = rec.get_area();
        cout << rec.cost(area) << endl;
        return 0;
    }
    
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值