当前位置: 首页 > news >正文

做直播网站赚钱做网站公司宁波

做直播网站赚钱,做网站公司宁波,中国新闻社浙江分社,wordpress图片主题下载失败面试题34#xff1a;什么是继承#xff0c;它有哪些类型 继承是面向对象编程的一个基本概念#xff0c;它允许一个类#xff08;派生类、子类#xff09;继承另一个类#xff08;基类、父类#xff09;的属性和方法。继承可以减少代码冗余#xff0c;提高代码重用性什么是继承它有哪些类型 继承是面向对象编程的一个基本概念它允许一个类派生类、子类继承另一个类基类、父类的属性和方法。继承可以减少代码冗余提高代码重用性并且有助于创建更复杂的类结构。 要在派生类中继承基类只需在派生类定义的时候列出基类的名称并指定继承方式公有、保护或私有 class BaseClass { // 基类的成员 }; class DerivedClass : public BaseClass { // 派生类的成员 };在上面代码中Derived 类公有地继承了 Base 类。这意味着 Base 类中的公有成员和保护成员在 Derived 类中保持原有的访问权限公有和保护而 Base 类中的私有成员在 Derived 类中是不可访问的。 派生类是基类的一个特殊化版本。这意味着派生类拥有基类所有的属性和方法同时还可以定义自己的新属性和方法。这种关系通常被称为 “IS-A” 关系即派生类 “是一种” 基类。 C支持三种继承方式 1公有继承 public 在公有继承中基类中的公有成员在派生类中保持公有基类的保护成员在派生类中保持保护而基类的私有成员在派生类中是不可访问的。这是最常见的继承方式。 2私有继承 private 在私有继承中基类中的所有成员公有、保护和私有在派生类中都是私有的。这意味着派生类的对象不能访问基类中的公有和保护成员。私有继承通常用于实现接口继承即派生类仅继承基类的接口而不继承其实现。 3保护继承 protected 在保护继承中基类中的公有成员和保护成员在派生类中都是保护的而基类的私有成员在派生类中是不可访问的。保护继承是公有继承和私有继承之间的一种折中方式它允许派生类访问基类的公有和保护成员但不允许派生类的对象这样做。 继承方式比较 继承方式基类公有成员基类保护成员基类私有成员公有继承继承为公有成员继承为保护成员不继承保护继承继承为保护成员继承为保护成员不继承私有继承继承为私有成员继承为私有成员不继承 面试题35继承的优缺点是什么 继承在面向对象编程中具有重要的地位它提供了代码重用和扩展性的机制。然而就像任何其他编程概念一样继承也有其优点和缺点。 优点 1代码重用继承允许子类重用父类的代码这避免了在多个类中重复编写相同的代码。 2扩展性通过继承子类可以添加或覆盖父类的行为从而实现对父类功能的扩展或修改。 3多态性继承是实现多态性的基础允许在运行时根据对象的实际类型来调用相应的方法。 4层次结构继承有助于创建类的层次结构这有助于组织和管理代码并使得程序结构更加清晰。 5简化设计通过继承可以将复杂系统分解为更小的、更易于管理的部分。 缺点 1代码耦合继承可能导致代码之间的耦合度过高。如果父类发生变化可能需要修改所有子类以适应这些变化。 2破坏封装性继承可能会破坏封装性因为子类可以访问父类的私有和保护成员。这可能导致父类的内部实现细节暴露给子类增加了代码的复杂性。 3单一继承的限制在C中类只能继承自一个基类单继承。这限制了代码的组织方式和可能的扩展性。 4菱形继承问题在多重继承中可能会出现菱形继承问题即一个类从两个或多个路径继承同一个基类。这可能导致名称冲突和歧义。 5不易维护如果继承层次结构过于复杂可能会增加代码的维护难度。子类可能会依赖于父类的特定实现细节而这些细节可能会在未来的版本中发生变化。 综上所述继承是一种强大的机制但也需要在使用时谨慎考虑其优缺点。在设计中应该根据具体情况来决定是否使用继承并尽量避免其潜在的问题。 面试题36多态在C中是如何实现的 多态 Polymorphism 是面向对象编程的三大基本特性之一它允许我们使用相同的接口来表示不同类型的对象。在 C 中多态通常通过虚函数 virtual functions 和指针或引用来实现。 虚函数是 C 中实现多态的关键机制。通过在基类的成员函数前加上 virtual 关键字可以将其声明为虚函数。当派生类重写 override 这个虚函数时就可以通过基类指针或引用来调用派生类的实现这就是所谓的动态绑定或运行时多态。与之相对应的是静态绑定即在使用父类指针或引用调用子类对象的成员函数时如果没有使用虚函数则会进行静态绑定从而只能调用父类的成员函数无法调用子类特有的成员函数。 虚函数的原理主要涉及虚函数表和虚函数指针 1虚函数表 当一个类含有至少一个虚函数时编译器会为这个类创建一个虚函数表 vtable 并在每个该类的对象中嵌入一个指向这个虚函数表的指针通常被称为 vptr 。 虚函数表是一个函数指针数组其中每个元素都是指向类中定义的虚函数的指针。每个类包括它的所有派生类都会有自己的虚函数表。当派生类重写基类的虚函数时派生类的虚函数表会包含指向这些重写函数的指针。 2虚函数指针 虚函数指针 virtual function pointer 简称为 vptr 是一个隐藏的成员变量它存在于包含至少一个虚函数的类的对象中。 vptr 指向一个虚函数表 vtable 该表包含了类中所有虚函数的地址。虚函数表是一个函数指针数组每个元素都指向一个虚函数的实现。 vptr 的存在是实现多态性的关键它允许程序在运行时动态地确定应该调用哪个类的虚函数实现。当通过基类指针或引用调用一个虚函数时实际调用的是 vptr 所指向的虚函数表中的函数。 虚函数的具体工作原理如下 1定义虚函数在基类中声明一个或多个虚函数。 2创建虚函数表编译器为包含虚函数的类创建一个虚函数表。这个表是一个函数指针数组每个元素指向类中的一个虚函数。 3初始化虚函数指针当创建类的对象时编译器会为该对象的虚函数指针成员变量分配内存并初始化虚函数指针以指向该类的虚函数表。 4动态绑定当通过基类指针或引用调用虚函数时程序会查找虚函数指针所指向的虚函数表并调用表中对应的函数。这个查找过程是在运行时进行的因此被称为动态绑定。 C中的多态主要有两种类型静态多态和动态多态。 静态多态 也称为编译时多态或早绑定 Early Binding 。这主要通过函数重载 Function Overloading 和模板 Templates 来实现。在编译时编译器就能确定应该调用哪个函数。 动态多态 也称为运行时多态或晚绑定 Late Binding 。这是通过虚函数 Virtual Functions 和继承来实现的。动态多态也被称为函数重写 Function Overriding 。在运行时程序根据对象的实际类型来确定应该调用哪个函数。 如下为样例代码 #include iostream class BaseClass { public:void overloadFunc(){printf(BaseClass overloadFunc()\n);}virtual void overrideFunc(){printf(BaseClass overrideFunc()\n);} };class DerivedClass : public BaseClass { public:void overloadFunc() // 函数重载{printf(DerivedClass overloadFunc()\n);}void overrideFunc() // 函数重写{printf(DerivedClass overrideFunc()\n);} };int main() { BaseClass* obj new DerivedClass;obj-overloadFunc(); // 调用基类的函数((DerivedClass*)obj)-overloadFunc(); // 强制类型转换后调用继承类的重载函数obj-overrideFunc(); // 调用继承类的重写函数delete obj;obj nullptr;return 0; }上面代码的输出为 BaseClass overloadFunc() DerivedClass overloadFunc() DerivedClass overrideFunc()在上面代码中 BaseClass 是一个基类它有一个成员函数 overloadFunc() 以及一个虚函数 overrideFunc()。 DerivedClass 是 BaseClass 的派生类它重载了 overloadFunc() 函数并且重写了 overrideFunc() 函数。在 main 函数中使用 BaseClass 基类的指针变量创建了一个 DerivedClass 派生类的对象并调用其 overloadFunc() 以及 overrideFunc()注意使用强制类型转换后才能真正调用到继承类的重载函数而重写函数则可以直接调用。 面试题37静态多态和动态多态有什么区别 静态多态和动态多态是面向对象编程中两种重要的多态形式它们在实现机制、运行时期和适用场景等方面存在显著的差异。 实现机制 静态多态也称为编译时多态主要通过函数重载和运算符重载实现。在编译时期根据函数参数的类型和数量或运算符的类型编译器可以确定应该调用哪个函数或运算符。 动态多态也称为运行时多态主要通过虚函数和继承实现。在运行时根据对象的实际类型即动态类型动态地确定调用哪个虚函数。 运行时期 静态多态在编译时期就可以确定函数的调用地址并生成代码。因此地址是早绑定的。 动态多态函数调用的地址不能在编译期间确定需要在运行时才能确定属于晚绑定。 适用场景 静态多态适用于编译时期就能确定函数调用的场景如函数重载和运算符重载。它主要用于增强代码的灵活性和可读性。 动态多态适用于需要在运行时才能确定函数调用的场景如通过基类指针或引用调用派生类的虚函数。它主要用于实现继承和多态性以实现代码的扩展性和灵活性。 总之静态多态和动态多态在面向对象编程中都扮演着重要的角色。静态多态主要关注编译时期的函数选择而动态多态则关注运行时期的动态行为。理解它们的区别和适用场景有助于更好地设计和实现面向对象程序。 面试题38为什么要将析构函数声明为虚函数 将析构函数定义为虚函数是一个重要的代码构建技术点特别是在设计基类时。这是因为在多态性的场景中当使用基类指针或引用指向派生类对象时如果没有虚析构函数可能会导致派生类对象的析构过程不完整从而引发资源泄漏和其他问题。 当基类的析构函数不是虚函数时如果通过基类指针删除派生类对象只会调用基类的析构函数而不会调用派生类的析构函数。这会导致派生类对象中的资源如动态分配的内存没有被正确释放从而产生资源泄漏。 通过将基类的析构函数声明为虚函数可以确保当使用基类指针或引用删除派生类对象时派生类的析构函数也会被调用。这是多态性的一个关键方面它允许在运行时确定应该调用哪个类的析构函数。 如下为样例代码 #include iostream class BaseClass { public:// 将析构函数声明为虚函数 virtual ~BaseClass(){printf(virtual ~BaseClass() \n);} };class DerivedClass : public BaseClass { public:~DerivedClass(){printf(virtual ~DerivedClass() \n);} };int main() { BaseClass* obj new DerivedClass;delete obj;obj nullptr;// 如果 BaseClass 的析构函数不是虚函数这里只会调用 BaseClass 的析构函数 // 而不会调用 DerivedClass 的析构函数导致资源泄漏。 // 如果 BaseClass 的析构函数是虚函数则会先调用 DerivedClass 的析构函数 // 然后调用 BaseClass 的析构函数确保资源被正确释放。 return 0; }上面代码的输出为 virtual ~DerivedClass() virtual ~BaseClass()在上面代码中BaseClass 类的析构函数被声明为虚函数。当通过基类指针 obj 删除派生类 DerivedClass 的对象时由于析构函数是虚函数所以会先调用 DerivedClass 的析构函数然后再调用 BaseClass 的析构函数。这样派生类中的资源能够被正确释放避免了资源泄漏。 因此通常建议在设计基类时将析构函数定义为虚函数以确保在删除派生类对象时能够正确地调用析构函数链。
http://www.zqtcl.cn/news/886357/

相关文章:

  • 网站怎么吸引流量用淘宝做公司网站
  • asp做的网站后台怎么进去老河口城乡建设局网站
  • 中铁建设集团有限公司官方网站wordpress质感
  • 那个网站点击率高pc网站自动生成app
  • 东莞营销型网站建站淘金企业网站建设
  • 怎么用模板做网站手机python编程软件
  • 做视频网站都需要什么软件下载广东网站建设哪家专业
  • 开淘宝的店铺网站怎么做网页设计需要学什么书
  • 如何做收费网站微信小程序开发教程详解
  • 软件下载网站如何履行安全管理义务网站合同书
  • 普宁17网站一起做淘宝网站建设 丽水
  • 网站注册需要多少钱wordpress缓存失败
  • 西安h5响应式网站施工企业安全生产管理规范最新版
  • 电商平台网站建设如何安装网站模版
  • wordpress攻击跳转seo营销软件
  • 广东中山市做网站python做的网站如何部署
  • VPS做镜像网站wordpress 安装七牛
  • 雄安做网站优化的公司小程序开发公司哪里强
  • 做的网站没有注册国家建设部网站倪虹
  • 中英文网站怎么实现做网站有名的公司
  • 先网站开发后软件开发显示网站运行时间代码
  • 品牌网站制作流程图百度网页版入口页
  • 哪些人需要做网站网站开发工程师 招聘
  • 东莞网站建设多长时间如何将网址提交到一些权重比较高的网站
  • 阳江网站seo公司wordpress建站博客
  • 我想做京东网站淘宝怎么做的wordpress淘宝联盟转链
  • 虚拟钱包对接网站开发视频教程营销型网站建设要懂代码吗
  • 莱州教育网站一站式网站搭建
  • 开发网站开票名称是什么捕鱼游戏网站开发商
  • 我国中小企业网站建设怎样办自己的网站