草庐IT

C++:虚拟继承

全部标签

c++ - 继承只为代码重用c++

我有A类和B类。现在我需要编写一个新的C类,它将使用A和B中的一些字段和方法,但不是全部。(我将使用A和B中大约50%的东西)。现在我正在考虑从A和B继承。但这会使C包含很多没有意义的字段和方法。基本上我只是为了代码重用目的才使用继承,否则我将不得不从A和B复制和粘贴许多行代码。这种做法真的不好吗?有不同的方法吗?谢谢! 最佳答案 继承没有“是a的一半”的概念,所以绝对不是去这里的方式。这听起来像是组合的主要案例。听起来A和B有不止一个“功能”,因为它们各有一半足以组成一个C。我不确定这是否适用于您的情况,但考虑将A分成两部分,A1

c++ - 这有可能继承私有(private)类但使成员公开吗?

我想让成员继承私有(private)。我想我看到了一个将它们公开的例子,尽管如此,这个事实是用private关键字派生的。我的问题:如何去做,如果可能的话,难道不应该禁止吗?classU{public:inta;protected:intb;private:intc;};classV:privateU{public:inti;//canmakeapublicagain?}; 最佳答案 您不能将c公开,因为它对U是私有(private)的,并且不能从V访问(此外,这样的设计会require这可能是有缺陷的,因为它会违反封装-一个类不应

c++ - 为什么通过公开继承另一个类来构建一个类是一种糟糕的做法?

我正在为我的OOP期末学习,遇到了一个让我有点难过的问题。问题是“解释为什么通过公开继承List类来构建Stack类是一种糟糕的方法。描述一个更好的解决方案。”我不确定我的回答是否正确,但是否因为“公开继承...”?并且最好改为私有(private)继承,这样除了Stack之外没有其他类知道继承? 最佳答案 如果派生类公开继承自基类,则派生类是基类的一个实例,可能具有一些额外的功能或重写的功能。在堆栈和列表的情况下,堆栈不是列表-它在逻辑上不执行列表操作,如搜索、连接、反转等-因此从列表继承不是一个好主意。您可以在这里使用私有(pr

C++ 覆盖继承的方法

我有以下两个类。由于Child继承自Father,我认为Child::init()覆盖了Father::init().为什么,当我运行程序时,我得到的是“我是父亲”而不是“我是child”?如何执行Child::init()?您可以在这里进行测试:https://ideone.com/6jFCRm#includeusingnamespacestd;classFather{public:voidstart(){this->init();};voidinit(){cout 最佳答案 目前Child::init正在隐藏Father::in

c++ - 继承 : expected class-name before ‘{’ token

我试图在C++中创建一个异常类,但它不起作用。我已将代码减少到最少,但仍然找不到错误。这是我的头文件:#ifndefLISTEXCEPTION_H#defineLISTEXCEPTION_H//C++standardlibraries#include/*CLASSDEFINITION*/classListException:publicexception{};#endif//LISTEXCEPTION_H这是我得到的错误:error:expectedclass-namebefore‘{’token这是出乎意料的。我该如何解决这个问题? 最佳答案

c++ - 复制构造继承

structA{virtualvoidwhat(){cout为什么不是b2.m=50?我正在尝试复制一个b对象,并且我有复制构造函数B(constA&x):m(50)。我是否需要为派生类ass复制一个c'tor?像B(constB&x)??我认为既然b对象有一部分,我们可以使用B(constA&x):m(50)而不是默认构造函数::S​​如果你有一个带有A对象参数的函数,你可以传入一个B对象。它与复制构造函数有何不同? 最佳答案 原因是B(constA&x)不是复制构造函数—T类型的复制构造函数必须始终采用对T的左值引用作为第一个(

用std :: vector< std :: string&gt填充虚拟listView;

我有成千上万个字符串的向量:std::vectora;充满了一些算法。遵循描述的方法这里,这是我创建一个ListView作为“虚拟列表”:hList=CreateWindowEx(0,WC_LISTVIEW,L"",WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_OWNERDATA,0,0,800,400,hWnd,(HMENU)ID_LISTVIEW,hInst,NULL);LV_COLUMNlvcol;...ListView_InsertColumn(hList,0,&lvcol);ListView_SetItemCountEx(hList,100000,LVSICF

使用keepalived时虚拟IP漂移注意事项

什么是Keepalived服务keepalived是一个开源的软件项目,用于实现高可用性(HA)的网络服务器负载均衡和故障转移。它允许将多台服务器组合在一起,形成一个虚拟服务器集群,实现负载均衡和故障转移。keepalived的核心功能包括:健康检查:keepalived会定期检测服务器的可用性,例如通过发送心跳请求或ping请求来检测服务器是否存活。虚拟路由决策协议(VRRP):keepalived使用VRRP协议来决定哪台服务器担任虚拟IP地址的主服务器,其他服务器则作为备份服务器。当主服务器出现故障时,备份服务器会接管主服务器的工作。负载均衡:keepalived可以将请求分发到多个服务

c++ - 类和接口(interface)之间的继承顺序重要吗?

先继承class还是先继承C++interface会有什么不同吗?例子:classA:publicIAbstract,publicClassB{};classA:publicClassB,publicIAbstract{}; 最佳答案 initializationorder直接基类(即ClassB和IAbstract)将不同。由基类说明符列表中的声明顺序决定。(强调我的)2)Then,directbaseclassesareinitializedinleft-to-rightorderastheyappearinthisclass'

音频秒生全身虚拟人像,AI完美驱动面部肢体动作!UC伯克利Meta提出Audio2Photoreal

就在最近,Meta和UC伯克利联合提出了一种全新的虚拟人物形象生成的方法——直接根据音频生成全身人像,效果不仅逼真,还能模拟出原音频中包含的细节,比如手势、表情、情绪等等。图片论文地址:https://arxiv.org/abs/2401.01885话不多说,直接上图。图片可以看到,人像刷地一下就出来了,十分逼真。而且从上面的文字对话可以看到,就是在讲可以用音频生成虚拟人像这件事。讲者的手势动作真的像是在做讲解。音频到Avatar,一步!这个系统不光可以生成全身逼真的形象,人像还会根据二人互动的对话动态做出手势。给定语音音频后,音频会为一个人输出多种可能的手势动作,包括面部、身体和双手等部位。