自学内容网 自学内容网

C++三大特征:多态

1.virtual关键字

1.1何为虚函数

virtual用于在base类中声明一个虚函数,[虚函数]的主要作用是[允许]在派生类(也称为子类)中对该函数进行[重写](override)

1.2何为重写

重写就是在drived类中写一个函数(返回类型,名称,参数列表)与base类相同的函数,drived类中的这个函数是会覆盖base类中的这个函数

虚函数和重写之间的关系

二者联系∶如果base类中有一个函数允许被重写,那么这个函数就是虚函数,在函数调用时,可以形成多态

2.组合

何为组合:简而言之,就是在一个class中复用另外一个class

ps:优先使用组合,而不是继承

原因:

组合是一种黑箱复用,继承是一种白箱复用,相对于黑盒,白盒对技术的要求更高//软件工程中,认为类与类之间的耦合度越低越好,

如果两个类之间是继承关系且耦合度较高,那么有一个类要改,那么后面一连串的类都需要更改

/重写和虚函数是紧密相连的,要重写再去写虚函数

3.多态

3.1 多态基础概念:

根据百度的释义如下:多态(Polymorphism)是编程语言和类型论中的一个重要概念,它指为不同数据类型的实体提供统一的接口。多态类型(Polymorphic Type)可以将自身所支持的操作套用到其他类型的值上。在面向对象编程(OOP)中,多态允许不同的对象对同一消息(即方法调用)做出不同的响应,这种能力通过继承和接口实现,提高了代码的灵活性和可扩展性。

顾名思义:多态就是多种状态

形象来讲就是不同类的对象进行相同的活动得到不同的结果

打个比方不同的人(可分为欧皇类和非酋类)去抽卡,他们的结果是有人200抽一井吃满,有人十发便拿下当期SSR风格角色

3.2 虚函数,重写在多态中的作用

虚函数一定要去重写,虚函数嘛,放在那里都虚拟的,虚拟的事物是不好用的,所以需要我们去重写一下

重写和虚函数是紧密相连的,要重写再去写虚函数

3.3多态案例展示

代码

class Person
{
public:
virtual void BuyTicket()
{
cout << "全价票" << endl;
}
};

class Student :public Person {
public:
//重写,可以不写virtual,但是建议加上
virtual void BuyTicket()
{
cout << "半价票" << endl;
}
};

//多态的条件
//1.虚函数重写
//2.基类指针或者使用基类引用

void Func(Person& object)
{
object.BuyTicket();
//动态绑定:多态的特点是指向谁调用谁,
}

//void Func(Person* object)
//{
//object->BuyTicket();
////动态绑定:多态的特点是指向谁调用谁,
//}

//不同的对象使用相同的动作得出不同的结果
int main()
{
Person p;//对象p调用base类,Person类型的
Student s;//对象s调用drived类,Student类型的

Func(&p);
Func(&s);

return 0;
 }

4.隐藏和重写之间的区别

隐藏只要派生类中的成员和基类中的成员名称相同就好了

而重写派生类的函数名之前是要加上virtual的

4.1隐藏

4.2重写

4.3 有关析构函数的重写

Q:析构函数是否建议设计成虚函数

A:析构函数在基类中一定要设计成虚函数,析构函数的名称最终会被编译器改成destruct

5. 有关关键字override和final

5.1 override

作用:用于编译时检查派生类重写函数是否成功

5.2 final

作用:

a. 修饰一个类时候可以阻止这个类被继承

b.修饰一个虚函数时可以阻止这个虚函数被重写

6. 重写,重载,重定义三者间的区别

重载:函数名相同:参数列表不同

复写(覆盖) :两个函数分别在基类和派生类,函数名/参数/返回值必须相同,两个函数都必须是虚函数

重定义(隐藏) :两个函数分别在基类和派生类中,函数名相同,两个基类和派生类不构成重写就是重定义

7.抽象类

纯虚函数:在虚函数后面加上" =0 "
一个类型在现实中没有实体对象,不想实例化出对象,可以设计成抽象类
抽象类:包含纯虚函数的类就是抽象类,抽象类不能实例化出对象、


原文地址:https://blog.csdn.net/m0_73426459/article/details/140364926

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!