草庐IT

pure-virtual

全部标签

c++ - 来自构造函数和析构函数的纯虚拟调用

C++标准规定禁止从构造函数或析构函数调用纯虚函数。这是什么原因?标准为什么要设置这样的限制? 最佳答案 在运行类析构函数时,所有子类析构函数已经运行。调用子类定义的虚方法是无效的,其析构函数已经运行。在构造函数中调用虚方法也存在类似的限制。您不能为尚未运行构造函数的子类调用虚方法。 关于c++-来自构造函数和析构函数的纯虚拟调用,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8

c++ - 当我覆盖 C++ 函数时,是否应该再次指定 'virtual'?

当我覆盖一个虚函数时:classGeoff{public:virtualintgetArea(){return0;}}我应该在覆盖它时再次指定“虚拟”吗?它有什么不同吗?我知道这两种方法似乎都可以正常工作,只是想知道是否还有更多。classGeorge:publicGeoff{public:virtualintgetArea(){returnx*y;}} 最佳答案 如果你使用C++11,你应该使用override相反,这两个文件都记录了您正在覆盖虚函数并检查匹配的虚函数是否存在于要覆盖的基础中。intgetArea()overrid

c++ - 当我覆盖 C++ 函数时,是否应该再次指定 'virtual'?

当我覆盖一个虚函数时:classGeoff{public:virtualintgetArea(){return0;}}我应该在覆盖它时再次指定“虚拟”吗?它有什么不同吗?我知道这两种方法似乎都可以正常工作,只是想知道是否还有更多。classGeorge:publicGeoff{public:virtualintgetArea(){returnx*y;}} 最佳答案 如果你使用C++11,你应该使用override相反,这两个文件都记录了您正在覆盖虚函数并检查匹配的虚函数是否存在于要覆盖的基础中。intgetArea()overrid

c++ - 常见问题解答 : Why does dynamic_cast only work if a class has at least 1 virtual method?

这在C++中无法编译:classA{};classB:publicA{};...A*a=newB();B*b=dynamic_cast(a); 最佳答案 因为dynamic_cast只能向下转换多态类型,所以标准这么说。您可以通过向基类添加virtual析构函数来使您的类具有多态性。事实上,你可能应该无论如何(见脚注)。否则,如果您尝试通过A指针删除B对象,您将调用UndefinedBehavior.classA{public:virtual~A(){};};瞧!脚注关于在多态类型中需要虚拟析构函数的“规则”有一些异常(except

c++ - 常见问题解答 : Why does dynamic_cast only work if a class has at least 1 virtual method?

这在C++中无法编译:classA{};classB:publicA{};...A*a=newB();B*b=dynamic_cast(a); 最佳答案 因为dynamic_cast只能向下转换多态类型,所以标准这么说。您可以通过向基类添加virtual析构函数来使您的类具有多态性。事实上,你可能应该无论如何(见脚注)。否则,如果您尝试通过A指针删除B对象,您将调用UndefinedBehavior.classA{public:virtual~A(){};};瞧!脚注关于在多态类型中需要虚拟析构函数的“规则”有一些异常(except

c++ - 私有(private)和 protected 纯虚函数之间有什么区别吗?

我可以理解,可能有理由将已实现的(与纯的)虚函数声明为私有(private)或protected。Afaik,如果您将实现的虚拟方法声明为protected,您的子类可以调用基类的方法(而其他人不能)。如果将其声明为私有(private),则只有基类可以调用虚拟方法的默认实现。但是,对于纯虚拟,没有基本实现......那么将纯虚拟声明为私有(private)或protected在功能上不等效吗?protected纯虚拟没有意义,因为您永远无法调用基类的相应方法。protected纯虚拟是否有任何意义?关于SO有一些类似的主题,但我找不到任何可以简明扼要地回答我的问题的内容。

c++ - 私有(private)和 protected 纯虚函数之间有什么区别吗?

我可以理解,可能有理由将已实现的(与纯的)虚函数声明为私有(private)或protected。Afaik,如果您将实现的虚拟方法声明为protected,您的子类可以调用基类的方法(而其他人不能)。如果将其声明为私有(private),则只有基类可以调用虚拟方法的默认实现。但是,对于纯虚拟,没有基本实现......那么将纯虚拟声明为私有(private)或protected在功能上不等效吗?protected纯虚拟没有意义,因为您永远无法调用基类的相应方法。protected纯虚拟是否有任何意义?关于SO有一些类似的主题,但我找不到任何可以简明扼要地回答我的问题的内容。

c++ - 如何解决 "pure virtual method called"

我明白为什么会发生这种情况,但我一直在尝试解决它...这是我的代码在我的程序退出时生成错误(因此导致崩溃)时所做的事情...purevirtualmethodcalledSomeClass::~SomeClass(){BaseClassObject->SomePureVirtualMethod(this);}voidDerivedClass::SomePureVirtualMethod(SomeClass*obj){//Dostufftoremoveobjfromacollection}我从来没有给newSomeClass打过电话但我有一个QList我附加了SomeClass*反对。S

c++ - 如何解决 "pure virtual method called"

我明白为什么会发生这种情况,但我一直在尝试解决它...这是我的代码在我的程序退出时生成错误(因此导致崩溃)时所做的事情...purevirtualmethodcalledSomeClass::~SomeClass(){BaseClassObject->SomePureVirtualMethod(this);}voidDerivedClass::SomePureVirtualMethod(SomeClass*obj){//Dostufftoremoveobjfromacollection}我从来没有给newSomeClass打过电话但我有一个QList我附加了SomeClass*反对。S

Dynamics 365: 详解虚实体(Virtual Entity) 从0到1

从Dynamics365forCustomerEngagement9.0开始,虚实体通过在Dynamics365CustomerEngagement中无缝地将数据表示为实体,实现了外部系统中的数据集成。它无需数据复制,通常也无需自定义编码。虚实体有如下的限制,但除了下面的这些限制外,它和其它的那些自定义实体没有区别:数据是只读的。虚实体特性不支持在Dynamics365中CE所做的更改在推回到外部系统只支持实体的组织级权限。不支持字段级安全对于外部数据,需要抽象建模为D365的支持的那些字段,就比如说你想获取外部系统中一条记录的姓名,性别,年龄字段,那么在虚实体中,你需要创建与姓名,性别和年龄