pure-virtual相关内容
我们总是将纯虚函数声明为: virtual void fun()= 0; 即,始终将其分配为0。 我了解的是,这是将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误。 解决方案 原因 = 0 是使用的原因是Bjarne Stroustrup认为在实现该功能时,他不能在C ++社区之外获得另一个关键字,例如“ pure”。这在
..
我有一个带有纯虚函数f()的抽象类,我想创建一个从该类继承的类,并且还要重写函数f().我将头文件和cpp文件分开. 我在头文件中声明了函数f(int),定义在cpp文件中.但是,编译器说派生类仍然是抽象的. 我该如何解决? 解决方案 函数f()和f(int)没有相同的签名,因此第二个函数不会为第一个提供实现. PVF的签名和实现必须完全匹配.
..
首先,我很抱歉是否还有其他帖子可以回答这个问题,我发现所有类似的帖子都涉及菱形继承方案或定义的函数,而事实并非如此. 简而言之,我想知道是否有可能让一个类从另外两个类继承而来,其中两个子类都具有一个具有相同名称和参数的函数,但它是在一个子类中定义的,并且在其他.此外,如果我能做到这一点,那么在对纯虚拟/抽象类进行调用的函数中,如果对派生类所做的更改很少,最终会在另一个子类上调用已定义的函数呢
..
我想去那里.但是,认真地讲,如何以"Apple"方式实现纯虚拟方法?您是否将协议与基类一起使用,并在这些方法上引发异常? 解决方案 在Objective-C中进行编程时,您需要清除虚拟方法之类的知识.您不会在Objective-C对象上调用方法,而是向它们发送消息.对象要么响应消息,要么不响应,但是由于动态绑定,您只能在运行时才能知道. 因此,您可以在基础对象上声明一个方法,而不提供
..
UPD .有一个标记,它是这个问题的重复.但是在那个问题中,OP要求HOW如何使用default定义纯虚拟析构函数.这个问题是关于有什么区别. 在C ++(可能的最新标准)中,使用空主体实现定义纯虚拟析构函数和仅空主体(或默认主体)之间的真正区别是什么? 变种1: class I1 { public: virtual ~I1() {} }; Variant 2.1:
..
我有3个类别:B,D和G. D是B,G是D. B和D都是抽象的. B来自第三方. B具有G需要实现的非纯虚拟方法(成为D).我可以并且将虚拟函数重新定义/覆盖为纯虚拟方法是一种好习惯吗? 示例: class B // from a third party { public: virtual void foo(); }; class D : public B { publi
..
最近我从Java和Ruby切换回C ++,并且很奇怪,当我更改私有方法的方法签名时,我必须重新编译使用公共接口的文件,因为私有部分也在.h中文件。 我很快想出了一个解决方案,我猜想它对于Java程序员来说很典型:interfaces(=纯虚拟基本类)。例如: BananaTree.h: class Banana; class BananaTree { public
..
错误在这里: vector毕业生 graduates.push_back(new AliceUniversity(identifier,id,salary,average)); 祖父母类: Graduate :: Graduate(char identifier, long id, int salary, double aver
..
请考虑以下示例代码: #include bar(); // Line2 base * bptr = this; bptr-> bar(); // Line3 ((base *)(t
..
考虑一个例子,其中方法是纯虚拟的,接受模板类型的参数(从外部类型注入),并且模板类型是局部类型(在函数体中定义)。这种情况会导致g ++下的编译时错误。诚然,这是一个相当大的角落,但它确实源于真正的代码。这是一个可编译的,可重复的示例: #include struct Outer { struct InnerB
..
用另一个纯虚方法重写纯虚方法是否有意义?是否有任何功能差异或代码风格的理由,喜欢下面的选项之一比另一个? 类接口{ public: virtual int method()= 0; }; 类抽象:public Interface { public: int method()override = 0; }; 类实现:public Abstract { public:
..
我有一个抽象类 Node ,它包含一个纯虚方法stub matches ,需要另一个 Node (即将 Node 子类化的实例)作为参数。 class Node; // forward declaration class Node { public: Node():parentNode(this){} virtual〜Node(){} Node * parentNo
..
我对一个“多继承问题”感到困惑。考虑下面的代码块: #include struct iface { virtual void foo()= 0; virtual〜iface(){} } struct wrapped { virtual void foo() { std :: cerr
..
我一直在试图创建一个基于继承的TCP服务器模型,并取得了不同的成功。这些服务器由单独管理,它的任务是关闭这些服务器和其他简单的维护功能: class TCPServer { public: TCPServer(); 〜TCPServer(); void Bind(TCPDaemon * daemon){ if(!daemon-> IsRunning()){ throw T
..
我有一个纯虚拟类,定义如下: class BaseClass { protected: const int var; public: void somefun()= 0; //我的意思是一个纯虚拟类 // stuff ... }; 如果我不添加如下定义的构造函数: BaseClass(const int& VAR):var(VAR){};
..
假设有这个接口: class A { public: virtual foo = 0; }; 和一个实现此接口的类 B : class B:public A { public: virtual foo(){} // Foo B } 最后,类 C 其中有 A 和 B 作为基类: C类:public A,public B {
..
如果一个基类将一个方法定义为虚拟的,但是我已经找到了一些我正在努力工作的代码, 实现一个空体,因此不需要派生类来实现一个体。 virtual void AMethod1(){} // 1 virtual void AMethod2(){assert(false);} // 2 virtual void AMethod3()= 0; // 3 目前的代码。
..
我正在进行一项练习,要求我使用一个基类Rodent,并使它成为一个纯抽象类。我对一个纯抽象类的理解是它作为一个接口,只包含纯虚函数。虽然这是一个很容易的练习,我对这本书提供的解决方案有一个问题: class Rodent { public: virtual〜Rodent(){cout
..
我正在进行一项练习,要求我使用一个基类Rodent,并使它成为一个纯抽象类。我对一个纯抽象类的理解是它作为一个接口,只包含纯虚函数。虽然这是一个很容易的练习,我对这本书提供的解决方案有一个问题: class Rodent { public: virtual〜Rodent(){cout
..
回答可以在这里找到: 有效C ++的摘录,第三版,Scott Meyers 发布的网址: hmjd 请阅读该页面,以便了解为什么会发生。你也知道为什么要替换 virtual void OnRelease()= 0; 由: code> virtual void OnRelease(){}; 会工作,但不是正确的解决方法。
..