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

做worksheet的网站电力建设科学技术进步申报网站

做worksheet的网站,电力建设科学技术进步申报网站,俄罗斯最新消息军事,不同网站的主机和域名复杂的菱形继承及菱形虚拟继承 复杂的菱形继承及菱形虚拟继承虚拟继承解决数据冗余和二义性的原理笔试面试题 复杂的菱形继承及菱形虚拟继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继…

复杂的菱形继承及菱形虚拟继承

  • 复杂的菱形继承及菱形虚拟继承
  • 虚拟继承解决数据冗余和二义性的原理
  • 笔试面试题

复杂的菱形继承及菱形虚拟继承

  • 单继承:一个子类只有一个直接父类时称这个继承关系为单继承
    在这里插入图片描述

  • 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承
    在这里插入图片描述

  • 菱形继承:菱形继承是多继承的一种特殊情况。(不推荐用,坑!)
    在这里插入图片描述


菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。
在这里插入图片描述

class Person
{
public:string _name; // 姓名
};
class Student : public Person
{
protected:int _num; //学号
};
class Teacher : public Person
{
protected:int _id; // 职工编号
};
class Assistant : public Student, public Teacher
{
protected:string _majorCourse; // 主修课程
};
void Test()
{// 这样会有二义性无法明确知道访问的是哪一个Assistant a;a._name = "peter";//会报错("Assistant::_name不明确")// 需要显示指定访问哪个父类的成员可以解决二义性问题,但是数据冗余问题无法解决a.Student::_name = "xxx";a.Teacher::_name = "yyy";
}

虚拟继承可以解决菱形继承的二义性和数据冗余的问题。如上面的继承关系,在Student和Teacher的继承Person时使用虚拟继承,即可解决问题。需要注意的是,虚拟继承不要在其他地方去使用。

class Person
{
public:string _name; // 姓名
};
class Student : virtual public Person
{
protected:int _num; //学号
};
class Teacher : virtual public Person
{
protected:int _id; // 职工编号
};
class Assistant : public Student, public Teacher
{
protected:string _majorCourse; // 主修课程
};
void Test()
{Assistant a;a._name = "peter";
}

虚拟继承解决数据冗余和二义性的原理

为了研究虚拟继承原理,我们给出了一个简化的菱形继承继承体系,再借助内存窗口观察对象成员的模型。

#include <iostream>
using namespace std;class A
{
public:int _a;
};
// class B : public A
class B : virtual public A
{
public:int _b;
};
// class C : public A
class C : virtual public A
{
public:int _c;
};
class D : public B, public C
{
public:int _d;
};
int main()
{D d;d.B::_a = 1; d.C::_a = 2;d._b = 3;d._c = 4;d._d = 5;return 0;
}

不使用虚继承(class C : public A):

在这里插入图片描述


使用虚继承(class C : virtual public A)

在这里插入图片描述

笔试面试题

  1. 什么是菱形继承?菱形继承的问题是什么?
    菱形继承是指在继承关系中存在一种特殊的结构,其中一个派生类同时继承两个基类,而这两个基类又共同继承同一个基类。这样形成的继承关系呈菱形,因此得名菱形继承。
  2. 什么是菱形虚拟继承?如何解决数据冗余和二义性的
    菱形虚拟继承是为了解决菱形继承中的数据冗余和函数二义性问题而引入的机制。通过使用虚拟继承(virtual),可以确保在菱形继承中共享基类的实例,从而避免了数据冗余的问题。
  3. 继承和组合的区别?什么时候用继承?什么时候用组合?
  • 继承(Inheritance)和组合(Composition)是面向对象编程中用于构建类之间关系的两种主要方式。

  • 继承是一种"is-a"关系,其中一个类可以继承另一个类的属性和行为。通过继承,子类可以共享父类的成员变量和成员函数,并且可以添加自己的特定功能。继承适用于具有层次结构的类,其中子类是父类的特殊化。

  • 组合是一种"has-a"关系,其中一个类包含另一个类的对象作为成员变量。通过组合,一个类可以使用其他类的对象来实现自己的功能,而不需要继承其所有特性。组合适用于在一个类中使用其他类的功能,而不需要与其形成层次结构。

  • 当需要表示一种类与类之间的层次结构、子类是父类的特殊化关系时,可以使用继承。继承可以提供代码重用和多态性的好处。当需要在一个类中使用另一个类的功能、将一个类作为另一个类的组成部分时,可以使用组合。组合可以实现代码模块化和灵活性。

  • 在选择继承或组合时,需要考虑类之间的关系和需求。如果存在"is-a"关系,且子类可以完全继承父类的属性和行为,可以选择继承。如果存在"has-a"关系,且一个类需要使用另一个类的功能,可以选择组合。此外,还应考虑代码的可维护性、扩展性和设计的灵活性。
    (本章完)

http://www.yayakq.cn/news/65684/

相关文章:

  • 设计网站printerest分析网易严选网站开发
  • 建设网站如何给页面命名wordpress集成文库插件
  • 网站注册系统小程序开发费用明细怎么做
  • 长沙企业建站在线咨询有哪些做外贸的网站
  • 深圳做二类医学学分的网站网站seo内部优化
  • 海外做淘宝网站国外免费wordpress空间
  • 广州广州网站建设公司韩国在中国做美食的视频网站
  • 做设计开哪个素材网站的会员好泉州最专业手机网站建设开发
  • 网站颜色配色电脑网页开发
  • 专业的网站建设公司广州 建 网站
  • 南京做电商网站的公司wordpress add_action do_action
  • 投标网站建设市场营销策略范文
  • flask做的网站有哪些WordPress 图片翻页
  • 建筑公司网站案例私人搭建服务器
  • 中国城乡与建设部网站公司网站建设与维护
  • 如何创建个人网站模板品质好的人
  • 网站开发实战第二章王烨林
  • 做的网站怎才能被别人访问到电影网站做多大会有风险
  • 手机建行网站网站建设优缺点
  • 广州魔站建站做旅行路线的网站
  • 房地产网站建设提案公司网页制作需要哪些内容
  • 招聘织梦网站专业做网站排名多少钱
  • 绍兴企业网站开发济南网站建设找大标
  • 鞍山做网站比较好的公司软件程序员
  • 网站开发需要哪些人才朔州seo
  • 网站建设 定制商城 小程序开发项目管理软件worktile
  • 外销网站百度做网站的公司
  • 资讯网站建设wordpress 分类 文章前
  • 网站建设需要注意哪些方面济南商城网站建设公司
  • 优秀网页设计赏析网站做seo收录