C++(补)

本文探讨了类的继承原理,如何避免代码冗余,包括public、protected和private的继承特性。重点讲解了多层继承和多重继承的解决方案,以及虚函数、重载、隐藏和重写的概念。此外,还介绍了单例模式和智能指针的作用,以及编程中的静态多态和动态多态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承

新定义的类就叫子类(派生类),原来的类就叫父类(基类)

子类继承于父类,会继承父类的所有东西(成员变量和成员函数)

目的:减少重复代码,让新写的代码可以重复利用已有的代码

继承方式:

  1. 只有父类的public成员被子类public继承才能在子类内和外都可以被访问
  2. 父类的protected成员被子类继承了之后只能在子类内部进行访问
  3. 父类的private成员被子类继承了之后不可访问

子类的构造函数:子类构造函数对自己定义的成员变量初始化,父类继承过来的成员变量需要用父类自己的构造函数初始化(未指定调用构造函数就调用父类默认的构造函数,指定的就调用指定的)

多层继承 (A->B->C)

       隐藏:子类如果定义了和父类同名的函数,那么子类中就有两个这个函数,通过子类对象调用的时候,调用到是子类自己定义的,因为把父类的隐藏起来了,如果要调用父类需要指定作用域。

多重继承:

        多重继承存在的问题:D中有两份A,一份是从B中继承的,一份是从C中继承, 如何解决?

                                            B虚继承于A

                                            C虚继承于A

                                            D中就只有一份A

多态

多种状态、多种形态

同一个东西,在不同的环境下,会呈现出不同的状态

静态多态(早绑定):调用一个函数,在编译阶段就能够确定最终执行的是哪个函数体

动态多态(晚绑定):调用一个函数,在运行阶段才能确定最终执行的是哪个函数体

虚函数表(函数(虚函数)指针数组):只要一个类有虚函数,那么这个类就会有一个虚函数表,存放这个类的所有的虚函数的入口地址

虚函数表指针:有虚函数的类创建的对象的前四个字节(32位)是虚函数表的首地址

函数重载:调用同一个函数名,传入不同的参数,会执行不同的函数体

重载、隐藏和重写的区别:

  1. 重载:同一作用域内,函数名相同,参数不同,与返回值无关
  2. 隐藏:子类定义了和父类同名的函数,除过和父类一模一样的虚函数
  3. 重写(覆盖):子类定义了和父类一模一样的虚函数

Explicit作用:防止单参数的隐式类型转换

Final:Final修饰的类不能被继承

            Final修饰的虚函数不能被重写

Inline:lnline修饰的成员函数成为内联函数(内联函数的本质是函数)和宏函数很像

智能指针:New了没有Delete就叫内存泄漏

                 (int *p=new int;可以不用delete)如果p是一个智能指针,那么当p的生命周期结束的时              候,p所指向的堆区的空间也会随之释放,不需要我们再去delete了

单例模式:有些类只能创建一个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值