草庐IT

ABSTRACT

全部标签

C++ 多重继承,基类派生自同一个类

我在尝试重用来自不同类的代码时偶然发现了一个问题。我把它贴在这里,希望你们中的一些人能够帮助我。我有一组类(B,C)派生自同一个类(A),它强制执行某些方法(foo,run)。B类实现了这些方法,B类和C类都提供了其他方法:#includetemplateclassA{public:A(){}virtual~A(){}virtualvoidfoo()const=0;//forceimplementationofthisfunctionvirtualvoidrun()const=0;//forceimplementationofthisfunction};templateclassB:p

c++ - 在父类(super class)中调用抽象方法,并在C++中的子类中实现它?

在Java中,可以编写具有未实现的抽象方法和调用抽象方法的非抽象方法的抽象父类(superclass)。然后在子类中实现了抽象方法。当您创建子类的实例时,父类(superclass)使用子类中的实现。我如何在C++中完成此操作?这就是我的意思,但是在Java中:父类(superclass).javapublicabstractclassSuperClass{publicSuperClass(){method();}privatevoidmethod(){unimplementedMethod();}protectedabstractvoidunimplementedMethod();}

c++ - 如何在编译时检查类是否是抽象的?

我所说的抽象类是指具有至少一个纯虚方法的类。如果检查显示该类不是抽象的,我希望编译失败。有可能吗? 最佳答案 使用std::is_abstract.#includestatic_assert(std::is_abstract(),"Toughttobeabstract.");查看inaction. 关于c++-如何在编译时检查类是否是抽象的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest

c++ - 基本的 C++ 继承

在学校和数百个在线视频中,C++继承是通过单个文件教授的;所有类都在main之上声明。我进行了广泛的搜索以找到继承如何与头文件一起工作的单个示例,但我很惊讶以前没有人问过这个问题。C++继承如何与头文件一起工作?每个子类是否需要它自己的扩展基本头文件的新头文件,或者子类定义文件是否可以定义父类(superclass)头文件的函数?此外,抽象类是否会影响上述问题? 最佳答案 在C++中,头文件的内容由预处理器插入到#included的位置。因此,将您正在使用的所有定义放在一个文件中与将这些定义拆分到各个头文件之间没有实质性区别。同样的

c++ - 在没有悬挂指针的情况下返回 C++ 中的抽象数据类型

你好,我有C#背景,没有很多C++经验。为了生成干净的代码,我尝试将实现和接口(interface)分开,并尽可能使用继承。当我尝试将典型的C#概念应用到C++时,我遇到了一个到目前为止我无法解决的问题。我认为这对于经验丰富的C++程序员来说可能是微不足道的,但它已经让我发疯了很长一段时间。首先我声明一个基类(目前它不包含逻辑但将来会包含)classPropertyBase:publicIProperty{};然后我为属性定义一个接口(interface)classIProperty{public:virtual~IProperty(){};virtualPropertyBasecor

c++ - 大型抽象基类

我正在编写一个包含30多个纯虚拟方法的大型抽象基类*。在实现类中查找要在基类中实现的所有函数有点乏味,主要是因为MSVC++不会告诉您您未能实现哪个函数并出现编译器错误“无法构造抽象类”"所以,我想知道我的大抽象基类是不是一个坏主意,或者我应该将它分成几个接口(interface),还是有一个编译器警告我可以激活它会告诉我我没有提供哪个方法实现...或者这只是抽象类编码的一部分,我应该习惯它。*它的作用是在几个不同的渲染子系统之间提供一层通用功能。 最佳答案 这个问题没有明显的正确答案。决定是否将基类分解为多个抽象基类可能应该是根据

C++中抽象类的函数定义

我想知道是否可以在一个函数中实现Java风格的监听器/抽象类。在Java中,如果我有如下接口(interface):publicinterfaceExampleListener{publicvoidcallExampleListenerMethod();}我知道可以在一个方法中实现这个接口(interface),以便像这样快速使用:someRandomJavaFunction{//dosomestuffExampleListenerobject=newExampleListener(){@OverridepublicvoidcallExampleListenerMethod(){//d

c++ - 为什么以及何时通过指针在 C++ 中传递类类型?

考虑以下代码:classAbstract{public:virtualvoidprintStuff()=0;};classDerived:publicAbstract{public:voidprintStuff(){printf("Stuff\n");}};现在,假设我想创建一个使用抽象类中的printStuff方法的函数。在我了解到在C++中只有一种方法是可能的之前,我认为会有两种方法:一种不太明显的指针,一种更明显的方法,类似于您期望对int、char等做的事情:voidptr_function(Abstract*abs){//non-obviousabs->printStuff(

c++ - 使类抽象化有什么好处

举个例子,classbase{public:virtualvoidabstract()=0;};classderived:publicbase{public:voidabstract(){cout它可以用其他方式写成,classbase{public:voidabstract(){cout它也提供相同的结果,事实上我不需要派生类。我确实读过很多关于抽象类的文章,说我们不能实例化基类,纯虚函数强制用户定义函数。但是如果我们在这两种情况下都看到上面的代码,我会得到相同的结果(或输出)。所以我的问题是abstract类如何帮助我们? 最佳答案

c++ - 制作不同子类实例的 vector

尝试搜索,没有返回(我认为)。是否可以制作一个抽象类的vector?例如,我有父类(superclass)Unit。我有士兵、车辆和轰炸机子类。但是我想要一个vector中的任何子类的实例,例如vectorUnitList可以包含士兵和车辆的实例吗?这可能吗?如果有帮助,我会使用C++。 最佳答案 是的,但是您需要使用指针或智能指针(我会选择这个)。structX{virtual~X(){}//a;a.push_back(newY);a[0]->foo();for(inti=0;i不要忘记删除分配的内存。为什么不能使用实际对象:假设