草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 在 C++ 中设计 ABC(抽象基类)的良好实践

在java中,我们可以定义不同的接口(interface),然后我们可以为一个具体的类实现多个接口(interface)。//SimulateJavaInterfaceinC++/*interfaceIOne{voidMethodOne(inti);....morefunctions}interfaceITwo{doubleMethodTwo();...morefunctions}classABCimplementsIOne,ITwo{//implementMethodOneandMethodTwo}*/在C++中,一般来说,我们应该避免使用多重继承,虽然多重继承在某些情况下确实有它的

c++ - 使用虚拟继承的类似乎允许基类构造函数覆盖另一个基类的成员

我对包含虚拟基的对象的内存布局不够熟悉,无法理解为什么以下内容似乎被clang和gcc编译错误。这是一个学术练习,所以请原谅构造函数中memset()的轻率。我正在使用带有clang7和gcc8.2的Linuxx86-64进行测试:#includestructA{A(){memset(this,0,sizeof(A));}inti;chara;};structB{charb='b';};structC:virtualB,A{};charfoo(){Cc;returnc.b;}当使用-O2-Wall-pedantic-std=c++17编译时,两个编译器都会生成以下没有警告的程序集:fo

c++ - 对于派生类对象的基类部分,如何在基类中实现运算符重载?

对于派生类对象的基类部分,如何在基类中实现运算符重载?请查看此示例代码并实现基类部分以在派生类对象上实现*运算符classbase{intx;public:};classder:publicbase{inty;public:constderoperator*(constder&rh){derd;d.y=y*rh.y;returnd;}}; 最佳答案 classbase{intx;public:base&operator*=(constbase&rh){x*=rh.x;return*this;}baseoperator*(constb

c++ - 派生自其实例以固定格式(数据库、MMF)驻留的基类……如何安全?

(注意:我正在寻找关于正确搜索词的任何建议,以阅读此类问题。"Object-relational-mapping"我想到了一个我可以找到一些好的现有技术……但我还没有看到任何适合这种情况的东西。)我有一个非常通用的classNode,目前您可以将其视为有点像DOM树中的元素。这并不完全是正在发生的事情——它们是内存映射文件中的图形数据库对象。但对于所有实际用途而言,类比都相当接近,因此为简单起见,我将坚持使用DOM术语。节点中嵌入的“标签”意味着您应该(理想情况下)能够使用它执行的一组特定操作。现在我正在使用派生类来执行此操作。因此,例如,如果您试图表示类似HTML列表的内容:Coff

c++ - 基类的函数模板是否可以分配给指向成员函数的指针

下面的代码应该在C++98/03中编译吗?structBase{templatevoidfunc(){}voidnorm(){}};structDerived:publicBase{};templatestructUsage{typedefvoid(U::*Method)();Usage(Methodtest){}};intmain(){Usagegood(&Derived::norm);//"Error:Cannotusevoid(*)()toinitializeUsage."onnextlineUsagebad(&Derived::func);return0;}这段代码片段在我尝试

c++ - 基类所有方法的 undefined reference 错误

我有以下基类和派生类结构。基础/包含/基础.hnamespaceA{namespaceB{classBase{public:Base();Base(constTypetype,constNamename);virtual~Base();//CopyconstructorBase(constBase&other);//AssignmentoperatorBase&operator=(constBase&rhs);//Comparisonbooloperator基础/src/基础.cpp#include"Base.h"//andotherrequiredincludesnamespaceA

c++ - 派生模板类访问基类成员数据

这个问题是对thisthread中提出的问题的进一步插入.使用以下类定义:templateclassFoo{public:Foo(constfoo_arg_tfoo_arg):_foo_arg(foo_arg){/*dosomethingforfoo*/}TFoo_T;//eitheraTypeAoraTypeB-TBDfoo_arg_t_foo_arg;};templateclassBar:publicFoo{public:Bar(constfoo_arg_tbar_arg,consta_arg_ta_arg):Foo(bar_arg)//base-classinitializer{

c++ - 为什么在构造期间在基类中调用重写的虚函数?

这个问题在这里已经有了答案:C++virtualfunctionfromconstructor[duplicate](7个答案)关闭7年前。有一个c++程序:#includeusingnamespacestd;classbase{public:base(){cout它输出:basebasefderivederivef我想知道为什么会出现f基数?我在base中询问构造函数扩展为:cout但这应该指向派生,那么为什么打印出基数f呢?

c++ - 避免将转换运算符中的拷贝复制到基类的子集

首先:你会大喊“XYproblem!”你会是对的,但现在我想看看是否有一个很好的解决方案来解决这个特定的Y来判断/最小化它与这个(大)X的其他Y相比的妥协。考虑以下可变参数模板类,它继承自所有模板参数并为其中的一个子集提供转换运算符:templatestructderived:Ts...{templateoperatorconstderived(){return{static_cast(*this)...};}};这允许你做这样的事情:structA{inta;};structB{doubleb;};structC{std::unique_ptrc;};usingABC=derived

c++ - 如何为任意(但在编译时定义)功能支持定义抽象基类?

我有以下C++设计问题,非常感谢任何建议/解决方案。请注意,我的背景不是计算机科学,因此我可能缺少一些明显的解决方案。我通常在代码中分离关键组件的方式是通过抽象类和纯虚函数定义接口(interface)。范例1:classB{public:virtualdoublef(doublex)=0;};classD1:publicB{public:doublef(doublex)const{return0.0;}};classD2:publicB{public:doublef(doublex)const{return1.0;}};这样我就可以很好地将接口(interface)与实现分开。这种方