C++继承和多态

前言

        继承和多态发生在类里面,继承就相当于一个类能够继承另一个类的函数和成员。继承的类被称为子类,被继承的类被称为父类。本文会简单的举例一些继承的使用和介绍一些继承的多种因素,各种注意事项之类的内容。

        另外,这里是根据我自己的理解做的一些讲述,一些部分可能不全面。这时请参考其他博主的博客。

一、什么是继承

        继承,会保持原有特性的基础上进行扩展,增加成员函数,成员变量。例如:水果是在植物这个类里面的,所以水果包含植物的特性。这时水果被称为子类也称为派生类,而植物被称为父类也称为基类。

        在C++中继承分为三种方式public继承、protect继承、private继承。对应的父类中三种不同的成员有不同的继承效果。具体效果如下所示:

        其中基类的private成员在派生类中都是不可见的,public继承会继承所有相对应的属性。

二、继承的写法

        继承的写法需要给明继承的方式以及继承的对象,写在派生类对象的分号后面:

class Person
{
protected:
    string _name;
};

class Student : public Person
{
protected:
    string _id;
}

        例如上图,Student就public继承了Person。当然继承方式不写会有默认的继承方式,class的默认继承方式是private继承,struct的默认继承方式是public继承。

        也可以增加模版继承,不过如果需要调用末班中的函数就需要声明清楚模版是什么,例如:

template<class T>
class Stack : public vector<T>
{
public:
    void push(const T& x)
    {
        vector<T>::push_back(x); // 显示调用
    }

    size_t size()
    {
        return vector<T>::size(); // 显示调用
    }
};


int main()
{
    Stack<int> st;
    st.push(1);
    st.push(2);
    st.push(3);
    st.push(4);
    cout << st.size() << endl;
    return 0;
}

        这种也就是模版的按需实例化,如果不写vector<T>::指定,那么编译会报错。

        在继承中有以下特性:

        1、子类对象可以复制给父类对象/指针/引用(因为是有的时候能对子类进行切割找到父类)

        2、父类对象不能复制给子类对象。指针和引用可以,但是需要原来的指针和引用指向的是子类对象。如果需要判断父类的指针/引用是否指向子类,可以使用dynamic_const()函数。

三、继承中的函数

        由于基类和派生类是继承关系,所以基类的成员在派生类其他成员的前面。

1、构造函数

        构造函数如果不显示调用,子类会自动调用父类的默认构造,如果没有默认构造,就需要主动显示调用,构造函数会优先调用父类的构造函数:

class Person
{
public:
    Person(const int& id)
        :_id(id)
    {}

protected:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值