接好运
点赞 评论

相关推荐

昨天 14:40
门头沟学院 C++
1. 什么是虚函数、纯虚函数?2. 什么函数不能声明为虚函数,析构为什么要声明为虚函数?3. 没有虚函数的话,C++如何实现多态4. 同一个类的不同对象的虚函数表是同一个吗5. 基类的虚函数表存放在内存的什么区,虚表指针vptr的初始化时间?6. 虚函数内部调用非虚函数是调用指针类还是对象类?7. 纯虚函数?使用场景有哪些?8. 纯虚继承解决什么问题?1. 虚函数是在面向对象编程中用于实现动态多态特性的机制;通过将基类的成员函数声明为虚函数,可以在派生类中重写这些函数,从而根据对象的实际类型确定调用函数版本;纯虚函数是一个在基类声明的虚函数,但没有在基类中提供实现。通过在函数声明的结尾使用=0来标记;2. 构造函数:因为在对象构建之前还未创建虚函数表;静态函数:静态函数没有this指针,与对象无关,不能声明为虚函数;内联函数:虚函数可以是内联的,但是当虚函数表现为多态的时候不可以是内联,因为内联是发生在编译期间的,而动态是发生在运行状态;析构函数可以是虚函数,而且建议都这么做,当将基类中的析构函数声明为虚函数的时候,在执行析构的时候,可以确保派生类的析构函数也被执行;3.  使用函数指针,使用模版(在编译时实现多态),使用策略模式(运行在运行时选择算法和行为);4. 同一个类的不同对象的虚函数表是相同的,因为虚函数表是按类生成的,而不是按对象生成的。每个对象的虚函数指针指向类的虚函数表,从而实现多态调用;5. 存储在常量区(只读数据段),vptr的初始化发生在对象的构造函数被调用时;6. 当一个虚函数内部调用一个非虚函数时,调用的是指针类型所指向的类中的函数,而不是对象实际类型的类中的函数;7. 纯虚函数是C++中用于定义抽象基类的工具。一个包含纯虚函数的类被称为抽象类,不能被实例化。纯虚函数的目的是让基类定义一个接口,而不提供具体的实现,具体的实现由派生类来完成。场景:定义通用接口、实现多态、延迟绑定;8. 纯虚继承(也称为虚继承)是C++中用于解决多重继承带来的某些问题的一种机制。以下是纯虚继承主要解决的问题:解决函数调用的歧义,避免成员变量的重复,解决菱形继承中的重复继承问题(菱形继承是指一个派生类从两个基类派生,而这两个基类又有一个共同的基类。如果不使用纯虚继承,派生类会从两个基类各集成一份共同基类的成员,导致重复继承和访问歧义;纯虚函数继承确保派生类只继承一份共同基类的成员);
点赞 评论 收藏
分享
牛客网
牛客企业服务