C++三大特性封装继承多态

C++的三大特性:
封装、继承、多态
封装:将一类事物所共有的属性和行为方法进行总结,封装在一个类中。该类的形成过程称为封装,该封装的类实例化的对象具有类的所有属性和行为方法。
封装的类的内部按照访问限定符可以分为:(public:)公有部分、(protected:)保护部分、(private:)私有部分。

继承:继承是把一个已经成型(封装好)的类继承到一个新形成的类中,一般将被继承的类称为父类(基类),主动继承的称为子类(派生类)。
继承的作用是为了实现代码的重用性。即父类的代码继承到子类任然可用。
继承分为:公有继承 、 保护继承 、 私有继承。
公有继承: (格式: class Derived:public Base)
父类的共有部分继承到子类的公有部分,父类的保护部分继承到子类的保护部分,父类的私有部分继承到子类的私有部分(父类的私有部分在子类不可访问)。
保护继承: (格式: class Derived:protected Base)
父类的共有部分继承到子类的保护部分,父类的保护部分继承到子类的保护部分,父类的私有部分继承到子类的私有部分(父类的私有部分在子类不可访问)。
私有继承: (格式: class Derived:private Base)
父类的所有都继承到子类的私有部分,父类的私有部分在子类不可访问。
多态
什么是多态:
调用相同的接口,表现出不同的结果。
如何实现多态:
通过定义和重写虚函数,通过基类的指针或引用指向派生类对象,通过基类的指针或引用调用虚函数,实现接口的高度统一。简而言之就是调用相同的接口表现不同的结果。


什么是虚函数?


virtual 函数返回值 函数名(形参);
只有成员函数可以是虚函数。
虚函数就是允许派生类重写它。
函数重写:
1.返回值相同,函数名相同,参数相同,
2.派生类中的virtual关键字可有可无,但基类的函数必须有virtual关键字。
3.作用域不同,一个位于基类,一个位于派生类
基类的指针可以隐式类型转换成派生类对象的地址。反之不行。
基类的引用可以隐式类型转换成派生类对象的别名。反之不行。
抽象类:包含纯虚函数的类叫抽象类,抽象类无法实例化(无法定义对象)
纯虚函数只有声明,不需要基类中实现。
如何声明纯虚函数:
virtual 返回值类型 函数名(形参)=0;

纯虚函数被派生类继承以后,如果被派生类定义,派生类就不是抽象类,如果在派生类中没有定义纯虚函数,派生类也将变成抽象类。


覆盖(函数重写)、函数隐藏、函数重载的区别?
成员函数隐藏(也称重定义)
A、不在同一个作用域(分别位于派生类与基类)
B、函数名字相同
C、返回值可以不同
D、参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意与重载的区别)
E、参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意与覆盖的区别)
成员函数覆盖(override,也称重写)
是指派生类重新定义基类的虚函数,特征如下:
A、不同的作用域(分别位于派生类与基类)
B、函数名字相同
C、参数相同
D、基类函数必须有virtual关键字,不能有static
E、返回值相同
F、重写函数的权限访问限定符可以不同
成员函数重载(overload)
是指函数名相同,参数不同(数量、类型、次序),特征如下:
A、相同的范围(在同一个作用域中)
B、函数名字相同
C、参数不同
D、virtual 关键字可有可无
E、返回值可以不同

函数重写的原理:通过查虚函数表,来得到对象的虚函数的地址

虚析构
在析构函数前加virtual关键字有什么作用?
防止内存泄漏 (delete p的时候,如果析构函数是虚函数,这时只会看p所赋值的对象,如果对象是派生类的对象,就会调用派生类的析构函数
,如果p赋值的是基类的对象,就会调用基类的析构函数)
如果析构函数不是虚函数,在delete p,调用析构函数,只会看指针的数据类型,而不会看赋值的对象,所以,会有内存泄漏
explicit 关键字的用法:
只能修饰构造函数,防止单参数的构造函数隐式类型转换,把一个常量转换成一个对象。
在没有加explicit之前,可以把一个常量赋给一个对象。

推荐构造函数前最好加explict ,析构函数前最好加virtual进行修饰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值