C++总结5——继承与多态

本文详细介绍了C++中的继承,包括私有继承、保护继承和公有继承的特性,以及构造/析构顺序。此外,重点讲解了虚函数和多态的概念,包括虚函数的实现机制、动态绑定与静态绑定的区别,以及析构函数为虚函数的重要性。还讨论了菱形继承和虚继承的问题,以及在面试中常见的关于虚函数的题目。
摘要由CSDN通过智能技术生成

一、继承
1.C++的继承
继承有3种形式:私有继承、保护继承、公有继承,缺省的继承方式是私有继承。

不论哪种继承方式,派生类都是显示的继承类基的保护成员变量和函数和公有成员变量和函数,继承方式只是限定在派生类中这两种成员变量的访问方式(即访问权限)。私有的成员变量和函数也被继承到派生类中,但是不能被访问,它是隐藏的,在派生类中不可见
派生类继承基类,除基类的构造函数和析构函数不外,其他的所有都继承。

继承是“is-a”的关系。派生类是基类的一种,例如:学生继承与人,学生是人的一种,但人不一定都是学生。

私有继承:将基类保护和公有的成员变量作为派生类的私有变量,不能在类外访问;
保护继承:将基类保护和公有的成员变量作为派生类的保护变量,不能在类外访问但是可以被继承;
公有继承:将基类保护和公有的成员变量作为派生类的公有变量,可以在类外访问。

注意:派生类中可以定义和基类同名的成员变量,因为有类的作用域的限定(Base::a Derive::a)

class Base
{
public:
    Base(int date):_ma(data)   {}
    ~Base()  {}
private:
    int _ma;
};

class Derive : public Base
{
public:
    Derive(int data1, int data2):Base(data1),_mb(data2)  { }
    ~Derive()  {};
};

在派生类的构造函数的初始化成员列表中显示的调用基类的构造函数,用基类的构造函数构造派生类中的基类部分。

2.派生类对象的构造/析构顺序
构造:构造基类成员对象–>构造基类–>构造派生类成员对象–>构造派生类
析构:析构派生类–>析构派生类的成员对象–>析构基类–>析构基类的成员对象

3.基类对象==>赋值给==>派生类对象 (X) 后面派生类的内存无法赋值
派生类对象==>赋值给==>基类对象 (V)将派生类中基类的部分赋值给基类对象
基类指针==>指向==>派生类对象 (V) 该指针智能访问从基类继承的那部分
派生类指针==>指向==>基类对象 (X) 可能非法访问内存

4.虚函数
如果派生类继承了有被vritual关键字修饰的函数的基类,被vritual修饰的函数称为虚函数。派生类可以重写该虚函数。如果派生类重写了该虚函数,那么派生类对象调用该方法时调用的就是派生类自己实现的方法。如果派生类没有重写该方法,则调用基类的方法。

class Base
{
public:
    Base(int data):_ma(data)   {}
    ~Base()  {}
    virtual void Show()//虚函数
    {
        cout<<"Base::Show()"<<endl;
    }
private:
    int _ma;
};

class Derive : public Base
{
public:
    Derive(int data1, int data2):Base(data1),_mb(data2)  { }
    ~Derive()  {};
    virtual void Show()//虚函数
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值