pure-virtual相关内容

纯虚拟调用从构造函数和析构函数

C ++标准说,禁止从构造函数或析构函数调用纯虚函数。这是什么原因?为什么标准应该这样限制? 解决方案 当一个类析构函数运行时,所有子类析构函数都有已经运行。调用由子类定义的虚方法是无效的,它的析构函数已经运行了。 在构造函数中调用虚方法时存在类似的限制。您不能为其构造函数尚未运行的子类调用虚拟方法。 ..
发布时间:2016-10-19 20:01:40 C/C++开发

C ++:纯虚拟赋值运算符

为什么如果我们在基类中有纯虚拟赋值运算符,那么我们在派生类上实现该运算符,它会给基类上的链接器错误。 目前我只有以下有关 http://support.microsoft.com/kb/130486 的说明,它表示 的行为是设计的,因为正常的继承规则不适用 。 对我来说,为什么它通过设计产生链接器错误?有人可以给我更清楚的解释吗? 编辑:添加了错误发生的简体代码: cla ..
发布时间:2016-10-17 11:17:29 C/C++开发

C ++ 11委托构造函数纯虚拟方法&函数调用 - 危险?

不是重复的调用虚拟函数和纯虚函数: 前问题涉及C ++ 03,而不是C ++中的新构造函数委托 在C ++ 11中,我们可以通过使用代理来确保在执行纯虚拟实现之前的正确构造。在构造函数中调用Pure Virtual函数的危险是什么,在构造函数中,但是在通过构造函数委托完成了“完全构造”之后? ,成员函数(包括虚函数成员函数,10.3)可以是 ()函数,其中的成员函数可以是: ..
发布时间:2016-10-17 09:59:18 C/C++开发

将函数的声明设置为0意味着什么?如何为函数分配一个整数?

当我在窗口类中找到以下函数定义时,我浏览了一个(不喜欢命名)GUI工具包的源代码,它包装了Windows API: virtual LRESULT CALLBACK wndProc(HWND,UINT,WPARAM,LPARAM)= 0; 这里发生了什么?如何将函数分配给整数?还是将它分配给 NULL ? 解决方案 如果你想在wndproc中使用函数指针,你需要 ..
发布时间:2016-10-17 09:54:15 C/C++开发

纯虚函数在C ++ 11

在C ++ 98中,空指针由文字 0 (或实际上任何值为零的常量表达式)表示。在C ++ 11中,我们更喜欢 nullptr 。但这不适用于纯虚函数: struct X { virtual void foo )= nullptr; }; 为什么不起作用?这不会完全有道理吗?这只是一个监督吗? 因为语法 0 ,不会修改 或其他非终端匹配 nullptr 。 ..
发布时间:2016-10-17 09:52:31 C/C++开发

“进口”从基类定义一个函数来实现抽象接口(在C ++中的多重继承)

假设我们有一个继承自两个基类的类(多继承)。基础类A 是抽象的,声明一个纯虚函数 foo ,其他基础 声明并实现非常相同签名的函数 foo 。 struct A { virtual void foo(int i)= 0; }; struct B { virtual void foo(int i){} }; struct C:public A,public B ..

是否有可能创建一个指针的向量?

只是想知道,因为我遇到了一个问题,是否有可能创建一个指针的向量?如果是,如何?特别是关于使用迭代器和.begin()与它,即:我将如何将这个向量变成指针的向量: class c { void virtual func(); }; class sc:public c { void func(){cout ..
发布时间:2016-10-14 20:34:34 C/C++开发

纯虚拟方法调用

EDIT:SOLVED 我正在开发一个多线程项目,现在我有一个基本工作类,从它继承的工作类。在运行时,工作者类成为线程,然后根据需要执行工作。 现在,我有一个导演我写的应该维护一个指针数组 我这样做是通过创建一个指向指针的指针。基类: baseWorkerClass ** workerPtrArray; 然后在Director的构造函数中,我动态地为基本 ..
发布时间:2016-10-14 12:55:59 C/C++开发

为什么纯虚拟析构器需要实现

我知道需要纯虚拟析构函数的情况。我也知道,如果我们不提供它们的实现,它会给我一个链接器错误。我不明白是为什么应该是这样的代码片段如下所示: int main() { Base * p = new Derived; } 这里没有删除,所以没有调用析构函数,所以不需要它的实现(假设它应该像其他正常的函数,声明但没有定义,链接器抱怨只有当我们调用它们)...或者我缺少一些 ..
发布时间:2016-10-14 11:24:58 C/C++开发

纯指定器对函数定义

在GCC上编译时,我得到错误:函数定义上的纯说明符,但是当我使用VS2005编译相同的代码时不会。 class Dummy { // error:pure-specifier on function-definition,VS2005 compiles virtual void Process()= 0 {}; }; 但是当这个纯虚函数的定义不是内联时,它工作: ..
发布时间:2016-10-14 10:31:01 C/C++开发

C ++纯虚函数有体

纯虚函数(当我们设置 = 0 时)也可以有一个函数体。 解决方案 你的假设是:纯虚函数不能被调用是绝对不正确的。当一个函数被声明为纯虚函数时,它只是意味着这个函数不能通过虚拟调度机制动态调用。然而,这个非常相同的函数可以容易地被静态地调用 ,而没有虚拟分派。 在C ++语言中当在调用中使用函数的限定名时,即在调用中指定的函数名具有 :: ..
发布时间:2016-10-13 11:21:44 C/C++开发

什么可以导致在C ++纯虚拟函数调用?

我教一个C ++编程类,我看到了足够多的错误,我有一个很好的感觉,如何诊断常见的C ++错误。但是,有一种主要类型的错误,我的直觉不是特别好:什么编程错误导致调用纯虚拟函数?最常见的错误,我看到,导致这是调用虚拟函数从基类构造函数或析构函数。在帮助调试学生代码时,应该注意哪些其他问题? 解决方案 常见的错误我已经看到,原因是从基类构造函数或析构函数调用虚函数。“ 构造的,指向虚拟 ..
发布时间:2016-10-13 11:16:26 C/C++开发

虚函数和纯虚函数之间的差异

可能重复: C ++虚拟/纯虚拟解释 纯虚函数和虚函数之间? 我知道“纯虚函数是一个没有主体的虚函数”,但是这意味着什么,实际上是由下面的行做的: virtual void virtualfunctioname()= 0 解决方案 一个虚函数使其类成为一个多态基类。派生类可以覆盖虚函数。通过基类指针/引用调用的虚函数将在运行时解析。也就是说,使用对象的动态 ..
发布时间:2016-10-11 22:23:27 C/C++开发

在什么地方“纯虚拟函数调用”崩溃来自?

我有时会注意到程序在我的电脑上崩溃时出现错误:“纯虚函数调用”。 这些程序在无法创建对象时一个抽象类? 解决方案 如果你尝试从构造函数或析构函数调用虚函数,因为你不能从构造函数或析构函数中调用虚函数(派生类对象没有被构造或者已经被销毁),它调用基类版本,在纯虚函数的情况下,不存在。 (请参阅实时演示此处) class Base { public: Base(){ ..
发布时间:2016-10-11 22:09:26 C/C++开发