当前位置:首页 > 数码 > C-20-探求最佳通常-了解各种经常使用场景-类型转换指南

C-20-探求最佳通常-了解各种经常使用场景-类型转换指南

admin4个月前 (05-07)数码45

类型转换(Casts)

C++提供了五种特定的类型转换:const_cast<>()、static_cast<>()、reinterpret_cast<>()、dynamic_cast<>()和C++20引入的std::bit_cast<>()。

请留意,旧的C格调类型转换(如(int)myFloat)在C++中依然有效,并在现有代码库中宽泛经常使用。C格调的类型转换涵盖了一切四种C++类型转换,因此它们更容易出错,由于您试图成功的目的并不总是显而易见的,或者会获取异常的结果。我剧烈倡导您在新代码中只经常使用C++格调的类型转换,由于它们更安保,且在代码中愈加突出。

虚构基类

含糊基类出如今多个父类共有一个共同的父类时。介绍的处置打算是确保共享的父类自身不具备任何配置。这样,其方法永远不会被调用,从而防止了歧义疑问。C++还有另一种机制,称为虚构基类,用于处置您宿愿共享的父类具备自己配置的状况。

假设共享的父类是一个虚构基类,则不会有任何歧义。以下代码在Animal基类中增加了一个sleep()方法,并修正了Dog和Bird类,使它们作为虚构基类从Animal承袭。假设不经常使用虚构基类,对DogBird对象的sleep()调用将是含糊的,并会生成编译器失误,由于DogBird将具备两个Animal子对象,一个来自Dog,一个来自Bird。但是,当Animal被虚构承袭时,DogBird只要一个Animal类的子对象,因此调用sleep()不会有歧义。

classAnimal{public:virtualvoideat()=0;virtualvoidsleep(){cout<<"zzzzz...."<<endl;}};classDog:publicvirtualAnimal{public:virtualvoidbark(){cout<<"Woof!"<<endl;}voideat()override{cout<<"Thedogate."<<endl;}};classBird:publicvirtualAnimal{public:virtualvoidchirp(){cout<<"Chirp!"<<endl;}voideat()override{cout<<"Thebirdate."<<endl;}};classDogBird:publicDog,publicBird{public:voideat()override{Dog::eat();}};intmn(){DogBirdmyConfusedAnimal;myConfusedAnimal.sleep();//由于虚构基类而不含糊}

留意:虚构基类是防止类档次结构中歧义的好方法。

类型转换(Casts)

C++提供了五种特定的类型转换:const_cast<>()、static_cast<>()、reinterpret_cast<>()、dynamic_cast<>()和C++20引入的std::bit_cast<>()。第一种在第1章中讨论过。第1章还引见了用于某些基本类型之间转换的static_cast<>(),但在承袭的高低文中还有更多内容。如今您曾经相熟编写自己的类并了解类承袭,是时刻更细心肠看看这些类型转换了。

请留意,旧的C格调类型转换(如(int)myFloat)在C++中依然有效,并在现有代码库中宽泛经常使用。C格调的类型转换涵盖了一切四种C++类型转换,因此它们更容易出错,由于您试图成功的目的并不总是显而易见的,或者会获取异常的结果。我剧烈倡导您在新代码中只经常使用C++格调的类型转换,由于它们更安保,且在代码中愈加突出。

static_cast()

(1)经常使用场景

static_cast()用于口头言语间接支持的显式转换。例如,将int转换为double以防止整数除法:

inti{3};intj{4};doubleresult{static_cast<double>(i)/j};

static_cast()也可用于口头因用户定义的结构函数或转换例程而准许的显式转换。例如,假设类A有一个接受B对象的结构函数,则可以经常使用static_cast()将B对象转换为A对象。

(2)在承袭中的运行

static_cast()可用于承袭档次结构中的向下转型:

classBase{/*...*/};classDerived:publicBase{/*...*/};Base*b{nullptr};Derived*d{newDerived{}};b=d;//向上转型,不须要转换。d=static_cast<Derived*>(b);//向下转型,须要转换。

(3)留意事项

reinterpret_cast()

(1)经常使用场景

(2)留意事项

std::bit_cast()

(1)特点

(2)示例

floatasFloat{1.23f};autoasUint{bit_cast<unsignedint>(asFloat)};if(bit_cast<float>(asUint)==asFloat){cout<<"Roundtripsuccess."<<endl;}

(3)运行场景

bit_cast()的一个用例是用于平庸可复制类型的二进制I/O。例如,可以将这些类型的单个字节写入文件,读取文件时,可以经常使用bit_cast()正确解释从文件读取的字节。

平庸可复制类型通常具备以下特色:

dynamic_cast()

(1)特点

(2)示例

Base*b;Derived*d{newDerived{}};b=d;d=dynamic_cast<Derived*>(b);Basebase;Derivedderived;Base&br{base};try{Derived&dr{dynamic_cast<Derived&>(br)};}catch(constbad_cast&){cout<<"Badcast!"<<endl;}

(3)与其余类型转换的区别

C++类型转换总结

20

情境

介绍的转换方法

说明

移除属性

const_cast()

用于移除对象的属性

言语间接支持的显式转换

static_cast()

例如,从转换到或

用户定义的结构函数或转换支持的显式转换

static_cast()

用于用户定义的转换

一个类的对象转换为另一个(有关)类的对象

bit_cast()

用于有关类之间的对象转换

同一承袭档次中的类的指针对象转换

dynamic_cast() (介绍)或 static_cast()

用于承袭档次中的指针对象转换

同一承袭档次中的类的援用对象转换

dynamic_cast() (介绍)或 static_cast()

用于承袭档次中的援用对象转换

不相关类型的指针转换

reinterpret_cast()

用于齐全不相关的指针类型之间的转换

不相关类型的援用转换

reinterpret_cast()

用于齐全不相关的援用类型之间的转换

函数指针之间的转换

reinterpret_cast()

用于函数指针之间的转换

留意事项


什么3D建模软件适合初学者使用?

SketchUp、SolidWorks、Blender、Daz Studio、AutoDesk 123D这几款3D软件比较适合初学者使用。

1、SketchUp

SketchUp是评价最高的3D设计软件之一。SketchUp提供免费和付费版本,可用于各种绘图应用,如电影,视频游戏设计,室内设计,建筑,土木和机械工程。

这个3D设计软件支持第三方插件程序,允许各种样式的表面建模,还提供绘图布局功能。同时还有一个名为3D库的开源库,用户可以在其中进行合作并提供模型。

2、SolidWorks

SolidWorks是最受欢迎的3D设计软件,具有大量用户友好的功能,使其成为最佳的3D建模软件。SolidWorks是由Dassault Systemes开发和发布的,是一款在Microsoft Windows上运行的计算机辅助工程(CAE)和计算机辅助设计(CAD)程序。

拥有丰富的工具集使其成为设计师和工程师的完美伙伴。由于给了大量SolidWorks教程,视频,PDF指南以及为修改最终模型质量而提供的各种选项,其易用性还是非常出色的。

Blender是一款免费的开源3D设计建模软件,也是很可靠,很通用的程序之一。一旦你学好它,你会发现它可以做的比你能够想象的还要更多,从3D动画到3D打印设计等。

Blender成功背后的庞大社区确保了软件的不断发展和完善。社区也可以有助于故障排除,并提供有关如何充分利用Blender的重要提示。你可以根据项目安装附加组件以解锁许多功能和扩展。

4、Daz Studio

Daz Studio是一款免费且功能丰富的3D建模软件,对初学者来说还是有点难上手的,但为专业人士提供了很多先进的功能。它使用户能够通过GPU加速的实时渲染和逼真的结果创建出色的3D艺术。

除了3D变形,构图,动画和渲染功能外,Daz Studio还可以借助应用程序交互式教程让你更容易成为熟练的3D艺术家。该软件支持Windows和Mac OS X,可作为免费软件提供。

5、AutoDesk 123D

AutoDesk 123D是一种计算机辅助设计(CAD)程序,提供大量3D建模工具,也支持3D打印技术。网站提供超过10,000种免费3D模型,你可以根据自己的喜好使用或定制。同时你还可以使用很多优秀的免费应用程序。

AutoDesk 123适用于Windows,OS X,Linux,iOS和Android。

Kano模型使用指南(二)——使用Kano模型

现在我们已经对Kano模型的工作原理有了基本的了解,是时候就真实场景感受一下了。 产品经理和用户体验设计师的目标是确定哪些功能可以让用户更满意,并利用这些信息对产品功能需求进行排序。 为了达到目的,还需要考虑一些重要的细节。 本节凝聚了多位研究学者在卡诺模型实践中得出的经验和总结的教训,包括每一步过程: ·选择功能和适合的用户; ·获取(尽可能有效的)用户数据; ·分析数据。 首先要考虑的是分析范围——包括功能和用户。 所要选择研究的功能应是那些用户能从中受益的功能 。 在备选池可能包含各种不同类型的功能诉求,比如技术负债清理、销售或营销团队报告系统、设计更新等。 但这些都不在Kano分析的范围之内。 Kano模型研究的是用户对可感知、可操作功能的满意度,可产品的功能远不于此。 如果是要获取能拒绝管理层等内部干系人某些诉求的支撑数据,使用Kano模型是危险的,它会让你的团队,用户和你自己产生混乱。 此外,还要限制问卷中 包含的功能数量 ,特别是有志愿参与用户的情况。 这样可以提高用户的参与度和专注度。 在选择用户(或潜在用户)参与研究时,一定要考虑用户所属的人口统计学特征、社会群组或角色。 否则最后得到的数据很可能是散布整张地图。 用户/潜在用户群可能不是同质的,他们对功能的感受也不相同。 但如果考虑到他们所属的某些分组,就可以显著减少分析中的噪音。 Jan Moorman在向潜在用户介绍新产品功能时,意识到了这一点的重要性。 该产品的核心功能已经存在,而且(据推测)是因竞争对手的产品而广为人知。 尽管如此,仍有一部分用户认为它是魅力型,而另一部分用户则认为它是必须型。 然后她得出结论,这些不同的反应是由于用户对市场的敏锐度。 当她按用户的个人资料对他们的回答进行细分时,每个功能的结果就更加清晰了。 虽然有各种细分可能性,但必须得选择对产品有意义的细分。 假设你正致力于B2B SaaS。 正在考虑添加一个允许用户将发票与采购订单相关联的功能,那这功能对小型企业和大企业客户的吸引力就有很大不同。 无论是在选择要研究的用户(因为你了解功能的目标),还是之后的分析所得的数据,都要记住这一点。 调查问卷及其显示方式是Kano研究的唯一输入。 因此,要确保此步骤的有效性。 尽可能清晰、简洁的问题设计问卷的关键。 每个问题都应该只代表单一功能。 如果功能很复杂,而且包含多个步骤和子流程,那就需要进行拆分。 问题应该以用户利益相关的角度进行表述,而不是产品作用的角度。 例如,“如果您可以选择自动改善照片,您觉得怎么样?” 就好于“如果您拥有MagicFix™,您觉得怎么样?”。 同时要注意 问题对的极性 措词。 就是说, 功能缺失问题并不一定是功能具备问题的对立面 ,它只是缺少功能而已。 来围观这个视频编辑app的示例,该示例考虑优化其导出速度: 功能具备问题:“如果导出任何视频的时间都在10秒以内,您觉得怎么样?” 错误的功能缺失问题:“如果导出任何视频的时间都超过10秒,您觉得怎么样?” 更合适的功能缺失问题:“如果导出某些视频的时间超过10秒,您觉得怎么样?” 尽可能直接给用户展示功能然后问她具备或不具备功能时的看法,这样比表述清楚的问题效果更好。 可以用文字描述功能优势,再用原型和交互式线框或模型来代替文本问题。 通过视觉和动态的“解释”,用户可以更清楚地了解这些功能和提问。 如果你以这种形式提出问题,那就应在用户与功能原型互动之后立即询问用户对标准备选答案的选择。 就像之前文字描述版问题一样。 这样用户就能始终保持清晰的记忆,不至于把这个功能与同一调查中的其他功能混淆。 有些人对Kano问卷中标准答案的顺序感到困惑。 通常,他们不明白为什么“我喜欢那样”出现在“必须是那样”之前,而那样似乎是一种更为温和的说法。 以这种方式呈现答案的逻辑是,它们从高兴的程度一路啪啪啪降到避免不高兴的程度。 还有一些可参考的替代措词,例如: 我喜欢那样 这是基本必需品,或者我希望这样 我是中立的 我不喜欢它,但可以容受 我不喜欢它,不能接受 或是这种,由Robert Blauth的团队撰写的: 这对我很有帮助 这是我的基本要求 这对我没影响 这有点麻烦 对我来说这是个严重的问题 实际上,我认为本指南开头介绍的选项列表在清晰性和简洁性之间达到了最佳平衡。 【查看链接 Kano模型使用指南二(译) 】 要点是我们要注意如何解释这些选项,且确保受访者理解调查问卷的目的也很重要。 选择最匹配的答案选项集,并事先向参与者解释说明各选项,这样可以有更好的结果。 多个团队提出对Kano方法学的一个重要补充,是在功能具备/功能缺失组合之后加入另一个问题。 这个问题询问用户这个功能对他们的重要程度。 获得这条信息对于区分彼此的功能、了解与用户最相关的功能非常有用。 它提供了一种区分大型功能与小型功能区的工具,以及它们是如何影响用户对产品的决策。 自述的重要性问题可以以下列形式提出:“它有多重要,如果:<条件>?”. 例如,“它有多重要,如果:导出视频所需时间总是不到10秒?”。 答案的范围应从1到9,从“完全不重要”到“极其重要”。 如果可能的话,在将问卷传给用户之前,先与团队成员测试这个问卷。 如果内部对问卷有任何困惑,那与外部人士探讨时肯定也存在。 现在正式进入激动人心的快车道(我编的🙄️)。 在对收集的结果进行制表和处理后,就能够对功能进行分类,并深入了解确定功能优先级排序的最佳方法。 分析可以分为 离散分析和连续分析 。 这些术语只是我想出的,因为这些方法缺乏任何标准(或更好)的术语。 二者都是对数学概念的引用,并且与它们如何将参与者的结果与Kano的分类进行映射有关。 每种方法都很有用,具体取决于你需要的类型。 我们处理Kano结果的最简单方法是: 根据所属的人口统计属性/角色标准来划分受访者; 使用评估表对每个受访者的答案进行分类; 统计每个功能(和人口统计属性)在每个分类的所有回答的数量; 功能的类别将是出现频次最高的回答(即模式); 如果各类别之间的结果接近,则使用以下规则(最左赢):必须型>期望型>魅力型>无差异型; 如果已要求受访者提供自述的重要性排名(并且应该这样做),请对每个功能取平均值。 最后你将得到这样一张表: 如果出现多个结果而没有一个明确的分类,则可能有隐藏的用户资料没有考虑到。 这种情况下,就要回到用户问卷中去寻找线索;尝试检查哪些用户的答案经常与其他用户的答案相同,从而找出可能没被发现的“人口统计集群”。 从结果表中,可以根据功能的重要性对其进行排序。 此后,在确定优先级时使用的一般经验法则是:首当其冲所有的必须型功能,然后添加尽可能多的期望性功能,最后来一丢丢魅力型功能。 这种分析类型非常有助于获得初步了解,在许多不需要更严格方法(如测试设计思想或草拟路线图)的情况下非常有用。 尽管离散分析可以很好地帮助我们入门并对结果有全面了解,但是它仍然存在一些问题。 即: ·在此过程中丢失了很多信息。 首先,从每位受访者的25个答案组合转变为六个Kano分类中的一个。 其次,所有受访者的答案进一步简化为每个功能的单一分类; ·对数据中存在的差异一无所知; ·赋予温和答案与强烈答案一样的权重。 只需想想对于魅力型功能,在功能缺失维度“应该如此”与“勉强忍受”的差别就能领会。 接下来的几节介绍的是Bill DuMouchel提出的一种很不错的 连续分析方法 。 不用担心这些计算;本指南随附的电子表格已经完成了这些工作(拉到底部点击原文获取数据)。 目前仅专注于理解每个步骤。 首先,将每个答案选项转换为满意度量表范围内的对应数值,从-2到4。 数值越大,答案就越能反映客户对该功能的想要程度。 重要性也从1分到9分,和之前一样。 功能具备 :-2(不喜欢), -1(忍受), 0(无所谓), 2(必须), 4(喜欢);功能缺失 :-2(喜欢), -1(必须), 0(无所谓), 2(忍受), 4(不喜欢); 重要性: 1(完全不重要),...,9(极其重要) 你可能会认为功能缺失量值似乎是反向的。 NO。 分数(正)越高,表示满意度潜力越大。 对于功能缺失的答案,不喜欢某些功能意味着强烈反对该功能的缺失。 所以如果将其包括在内,则将有更高满意度的潜力,这就是为什么它具有更高的分数。 这种不对称比例(从-2开始而不是-4)是因为 ,从负向的答案中得出的分类(反向型和可疑型)比从正向的答案中获得的分类(必须型和期望型)更弱。 因此DuMouchel决定强化正向值。 这些分数将功能在一个二维平面内进行分类,就不再需要标准评估表。 分析的重点应放在正象限上,这个象限是最强烈的正面情绪回答 。 除此之外表格中还有其他较弱的答案以及“可疑型”和“反向型”分类。 如果某个功能是“反向型”,可以利用之前介绍的技巧将其定位为对应的逆向分类,将分数分别调整为“功能具备”和“功能缺失”问题对调后的数值,这样一来就了有新的分类,biu!再去掉“反向型”分类。 A sidenote: Satisfaction and Dissatisfaction coefficients 在翻阅各种Kano资料时,经常会看到有关满意度和不满意度系数的引用。 本节介绍的DuMouchel连续分析方法有更好的替代方法。 但考虑到它们被引用的频率,先得简单做个概述。 Mike Timko使用 “Better”和“Worse”系数 来反映用户对某个功能具备/缺失的满意或不满意变化。 但他并没在原稿中将其命名为“满意系数”和“不满意系数”,只是约定俗成的叫法。 先统计给定功能在每个分类中的答案总数,再套用以下公式进行计算: 尽管它们确实产生了可用于相对比较的数值结果,但这些系数是有些问题的,Timko本人在他的文章中也提到了这些问题。 最主要的是,它面临着和离散分析相同的问题:这些数值是建立在对所有受访者答案的合并简化得出的某一Kano分类基础之上。 这类信息的丢失会导致数据的不稳定性增加,以及对所有答案赋予相等权重而忽视其原有强烈/较弱的情绪。 使用DuMuchel的连续分析方法计算出的功能具备和功能缺失评分也能达到同样的目的,且没有该类问题,这也是重点关注它的原因。 如果对每个可能的答案都标有数值,那就意味着可以使用平均数。 以下是我们需要为每个功能进行的计算: 1、所有功能具备、功能缺失和重要性答案的平均分值; 2、功能具备、功能缺失和重要性评分的标准差。 根据每个功能的功能具备和功能缺失的平均分值,可以将它们放在二维分类平面上,如下图所示: 当然目前讨论的是平均分值,但它们隐藏了数据中可能存在的巨大差异。 这也是为什么将标准差以误差线的形式添加到图形中,这样可以从图中了解这个分类是符合还是偏离目标。 如下图所示: 最后一步是添加重要性分数。 可以通过将散点图中的点转换成气泡来可视化这一维度,气泡的大小与其重要性成比例。 这样就能很容易地比较具有相似定位的功能需求。 之前关于离散分析给出的一般优先级规则在这里仍然适用:必须型>期望型>魅力型>无差异型。 这可以很好地转化为图形术语: 对于小功能集,另一种(可能更好的)可视化方法是通过堆栈排名列表。 表格分三列(从高分到低分)对功能进行排名:潜在不满意度,潜在满意度和重要性。 在这个案例中,前两列分别是功能缺失评分和功能具备评分。 如下图所示: 注意最后两行。 在那种情况下你会怎么做? 一个是对不满意有更大影响的无差异型功能(但其实非常接近必须型)。 另一个是能明显提高满意度并且用户认为很重要的功能。 在某些情况下我们需要优先考虑其中一个。 由此可见仅遵循一些排序并不能解决实际中的所有难题;很多情况下我们仍然需要做出艰难的选择,进行实验,测量和迭代。 查看下一节点击 Kano模型使用指南(三)——Kano研究方法(和工具集) 查看原文可点击 The Complete Guide to the Kano Model

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: C

“C-20-探求最佳通常-了解各种经常使用场景-类型转换指南” 的相关文章

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

当天咱们将深化讨论C++中的多线程编程,提醒多线程如何解锁性能后劲,提高程序的并发性能。 什么是多线程? 在计算机迷信中,多线程是指一个进程(程序的口头实例)中的多个线程同时口头。每个...

提升性能的新利器-17中的并行功能-C (提升 性能)

提升性能的新利器-17中的并行功能-C (提升 性能)

C++17扩展了STL(Standard Template Library,标准模板库)以支持并行算法。这意味着许多常见的算法,如std::sort、std::for_each、std::tran...

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

一、类模板特化 1.特化的成功 你可以为特定类型提供类模板的替代成功。例如,你或许以为constchar类型(C格调字符串)的Grid行为没无心义。Grid<constchar&...

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

C工具 变长参数列表 这局部解释了旧的C格调变长参数列表。了解这些内容很关键,由于你或许会在遗留代码中遇到它们。但是,在新代码中,你应该经常使用变参模板来成功类型安保的变长参数列表。...

的区别-中-C-math.h-和-cmath (的区别中的钱)

的区别-中-C-math.h-和-cmath (的区别中的钱)

一、引言 C++规范库中的<cmath>和C言语规范库中的<math.h>均为数学函数库,它们提供了一系列数学函数和常量。但是,这两者之间存在一些关键的区别...

监禁程序后劲的优化利器-C-中的内联函数 (监禁等于坐牢吗)

监禁程序后劲的优化利器-C-中的内联函数 (监禁等于坐牢吗)

一、内联函数的定义和特点 内联函数是一种不凡的函数,它经过在编译时将函数调用交流为函数体中的代码,以缩小函数调用的开支,从而提高程序的口头效率。内联函数通罕用于那些函数体较小、调用频繁的场景...

与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

引言 C++是一种弱小的编程言语,它提供了许多工具和库以支持面向对象编程和通用编程。设计形式是一种用于处置特定疑问的经过验证的处置打算。C++的灵敏性和设计形式的广泛...

深入学习-C-掌握内存管理的艺术 (深入学习习总书记系列讲话精神)

深入学习-C-掌握内存管理的艺术 (深入学习习总书记系列讲话精神)

简介 内存管理是学习任何编程语言的必备知识,C++也不例外。C++ 是一门功能强大、底层控制能力强的编程语言,尤其适用于系统级开发、游戏开发和嵌入式系统等领域。与一些更简单的编程语言相比,学...