c++第八天(类的继承)

22 篇文章 2 订阅

目录

一、什么是继承?

二、继承的语法

三、继承中的构造函数

四、继承总结


一、什么是继承?

继承是面向对象软件技术当中的一个概念。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

简单的理解: 儿子从父亲中把资源给继承(拷贝)过来。 儿子就不需要重复实现父类的功能接口。 作用:提高代码的复用性。

二、继承的语法

class 派生类名 : 继承方式 基类名 {

};

1、继承的权限问题:

public:   //公共成员 : 所有人都可以访问, 类内,类外,子类(派生类) 。

protected: //保护成员 : 类内 和 子类(派生类) 可以访问 。

private: //私有成员 : 类内可以访问。

2、访问基类(父类)的私有成员:

(1).在公共区设计一个接口,提供子类访问 。

(2).在保护区设计一个接口,提供子类访问 。

(3).把私有成员设置为保护或共有属性 (不推荐,破坏成员属性)。

//demo1类的继承

#include<iostream>
using namespace std;

//定义一个昆虫基类
class insect{
public:
    void fly(){
        cout << "我在飞" << endl;
    }
    void climb(){
        cout << "我们在爬" << endl;
    }
    int go;  //基类的公共属性

private:    //私有属性,子类不能访问
    int run;
};

//继承昆虫类,蝴蝶
class butterfly : public insect{
public:
    void gather_honey(){
        cout << "我是蝴蝶在采蜜" << endl;
    }
    void pollination(){
        cout << "我在传粉" << endl;
    }
    
private:
    char color[10];     //颜色
    char variety[10];  //品种
};

//继承基类,蚂蚁
class ant : public insect{
public:
    void move_house(){
       cout << "我是蚂蚁在搬家" << endl;
    }
private:
    int move;
};

int main()
{
    butterfly a;
    a.gather_honey();
    a.pollination();
    a.fly();

    ant b;
    b.move_house();
    b.climb();
    b.go = 11;
    cout << "我们蚂蚁有:"<<b.go<<"个" << endl;
}
//demo2类继承的属性
#include <iostream>
using namespace std;

class base 
{
    public:   //公共成员  : 所有人都可以访问, 类内,类外,子类(派生类) 
 
    protected: //保护成员 : 类内 和 子类(派生类) 可以访问 
    void show()
    {
        cout << this->a << endl; 
        cout << this->b << endl; 
        cout << this->c << endl; 
    }
       void set(int a,int b,int c)
    {
        this->a = a;
        this->b = b;
        this->c = c;
    }
    private: //私有成员 : 类内可以访问
    int a;
    int b;
    int c;
};

class  xbase : public base
{
public:

  //设置base 中的数据成员 
  void set_base(int a,int b,int c)
  {
      this->set(a,b,c);
  }

  //显示 base 中的数据成员 
  void show_base()
  {
     this->show(); 
  }

};

//外人,别人 
int main()
{
    xbase  t;

    t.show_base(); 

    t.set_base(1,2,3); 

    //t.show();
    t.show_base(); 


}

三、继承中的构造函数

1、派生类想使用无参构造,那么在基类也要定义无参构造。

2、如果派生类(子类)的有参构造函数没有传参到基类(父类)的有参构造函数中,那么在主函数定义的派生类(子类)的对象时,只会调用基类(父类)无参构造函数。

3、派生类继承的参数列表初始化格式:(传参格式)

基类(父类): class Person { Person(int age,const char *name){ } };

派生类(子类): class Student : public Person{

   Student(const char *name,int age) : Person(age,name) {

} };

4、派生类和基类函数重名,优先使用派生类的函数。

5、可以用域操作符"::"实现派生类调用基类函数。 Person :: show_init(); //派生类访问基类的show_init()函数。

四、继承总结

1、class Student : public Person{ }; //相当于把Person(父类)放入Student(子类)的公共区。

2、class Student : protected Person{ }; //相当于把Person(父类)放入Student(子类)的保护区。

提示:假设没有填写继承方式,默认的方式是 私有继承!

3、继承中的参数列表初始化:格式:构造函数(形参):数据成员(形参),类名(参数)。

 

4、继承中的参数列表初始化: 三种继承方式有什么不同?

(1)不管哪种继承方式,都不会影响"子类"对"父类"的访问权限。 (子类可以访问父类的 保护和公用成员)。

(2)不同的继承方式,只会影响类外访问基类的权限(类外只能访问基类的,公有继承的公有成员) 。

(3)不同的继承方式,就相当于把基类放入派生类的对应区域。 (再根据公共,保护,私有的权限方式思考即可!)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值