virtual-functions相关内容
class A {上市:void operator=(const B &in);私人的:一个;};B类{私人的:国际 c;} 对不起.发生了错误.赋值运算符有效吗?或者有什么方法可以实现这一目标?[A班和B班没有关系.] void A::operator=(const B& in){a = in.c;} 非常感谢. 解决方案 是的,您可以这样做. #include 使用命名空间标准
..
我正在尝试提出面向对象的设计,但难以满足 Liskov 替换原则.这是一个说明性示例: class 食物{上市:虚拟无效打印名称(){//......}};类水果:公共食品{};类肉类:公共食品{};类动物{上市:食物 *_preferredFood;virtual void setFoodPreference(Food *food)=0;};类食肉动物:公共动物{上市:void setFood
..
从这个使用继承时实现 operator== 问题,我看到人们说operator== 不应该是 virtual(接受的答案甚至说“operators cannot be virtual",我发现这不是稍后为真): c++ 允许运算符是虚拟的.但我不会让它们成为虚拟的.多态性和运算符实际上并不能很好地结合在一起(并且自由运算符函数显然根本不能是虚拟的).---- 约翰内斯·绍布 - litb
..
我正在尝试实现多态,其中派生类实现了一个在单独线程中运行的方法: #include #include #include 班级基地{上市:std::thread m_jobThread;~Base() { if (m_jobThread.joinable()) m_jobThread.join();}虚拟无效 doJob() = 0;void doJobInBackground()
..
(这是一个关于软件设计的相当大的问题.如果它不适合 StackOverflow,我愿意将其复制到软件工程社区) 我正在使用 heap_stat,这是一个调查转储的脚本.该脚本基于这样的想法,对于任何具有虚函数的对象,vftable 字段始终是第一个字段(允许找到对象类的内存地址).> 在我的应用程序中,有一些对象具有 vftable 条目(通常每个 STL 对象都有),但也有相当多的对象没
..
抽象方法和虚拟方法之间有什么区别?建议在哪种情况下使用抽象或虚拟方法?哪一种是最好的方法? 解决方案 抽象函数不能具有功能.您基本上是在说,任何子类都必须提供自己的此方法版本.这太笼统了,甚至无法尝试在父类中实现. 虚拟功能基本上是说外观,以下功能对于子类而言可能足够好,也可能不够好.因此,如果足够好,请使用此方法;否则,请覆盖我并提供您自己的功能.
..
I类{上市:虚拟std :: wstring const&GetName()const = 0;}; 通常,实现此接口的客户端将其名称包含在其主体内.而且一切正常.但是有时,"GetName"的结果是在函数执行期间计算的.使用静态变量存储结果不是一个好主意.但是按值返回需要额外的性能开销. 那么如何解决这个问题?谢谢. 解决方案 但是按价值返回需要额外的性能开销. 这
..
可以使用 __ declspec(novtable)属性在MSVC中完成C ++ vtable的生成.但是,似乎没有等效属性,GNU C ++编译器.事实是,将纯虚拟类的vtable不必要地链接到 __ cxa_abort()和许多其他链接中,并且我想避免这种情况的发生,因为我正在为嵌入式系统编程.那么,我该怎么办? struct ISomeInterface{虚拟void Func()= 0
..
我看到CUDA不允许将带有虚函数的类传递到内核函数中.有没有解决此限制的方法? 我真的很希望能够在内核函数中使用多态性. 谢谢! 解决方案 罗伯特·克罗维拉(Robert Crovella)评论的最重要部分是: 只需在设备上创建对象即可. 因此请记住,我正在处理这样的情况:我有一个抽象的 class Function ,然后实现了一些封装了不同功能及其评估的实现.这
..
在C ++中,子类可以在重写虚拟函数时指定不同的返回类型,只要该返回类型是原始返回类型的子类(并且两者均作为指针/引用返回)即可. 是否可以将此功能扩展到智能指针?(假设智能指针是某些模板类) 说明: class retBase {...};class retSub:公共retBase {...};班级基础{虚拟retBase * f();};子类别:公共基地{虚拟retSub *
..
在C ++中,如果未定义副本构造函数,则编译器将为您执行此操作.如果定义了一个,则编译器不会.编译器生成的副本构造函数可以是平凡的或不平凡的.在琐碎的复制构造函数中,它会执行成员级复制.就是这样. 但是,如果有虚函数,则复制构造函数是不平凡的.它不能只是按位复制. 这是我的程序.没有什么特别的.只是为了说明我的观点. #include使用命名空间std;clas
..
我试图了解一个类的vtable在C ++中的敏感程度,为此,我需要了解对于3种更改情况是否需要重新编译整个类层次结构(总共3个头文件)在下面列出.首先,这是我的班级层次结构: A类{上市:虚拟虚空method1()= 0;虚拟虚空method2()= 0;虚拟〜A(){}};B类:公共A {上市:virtual void method1(){};virtual void method2(){}
..
我有3个班级,A,B和C: A类{///一些代码};B级:公共A{///一些代码};C级:公共B{///一些代码}; 我想使A类和B类成为抽象类,以防止创建它们的实例,但是这两个类都没有抽象方法.即使没有抽象方法,也有办法使类抽象吗? 解决方案 如果您将这些类用作示例代码中所示的基类,则可能是虚拟析构函数.并且由于析构函数是一种方法,因此可以将其设为纯虚拟(“抽象")析构函数,以使
..
伙计们,这是我要运行的一些代码,问题是它无法按我想要的方式工作.我无法弄清楚这是怎么回事.我是c ++新手,请帮忙. #include#include#include使用命名空间std;/***超级班*/类形状{受保护的:int _dimensions;上市:Shape():_dimensions {0}{};形状(int昏暗):_
..
最流行的示例说明了为什么在运行时进行虚拟调度是在编译时无法确定要创建哪个派生类的情况.例如: Base * b =(rand()%2 == 1?new Derived1():new Derived2()); 或何时取决于用户输入. 假设情况并非如此,并且可以在编译时完全确定基本指针所指向的派生类. 如果在编译时知道基类指针指向哪个Derived类,编译器是否通过将虚拟函数调用替
..
header.h #include使用命名空间std;A级{上市:虚拟虚空显示(int i = 5){cout#include"header.h"使用命名空间
..
请考虑以下标准CRTP示例: #includetemplatestruct Base {void f(){static_cast(this)-> f();}void g(){static_cast(this)-> g();}};struct Foo:public Base{void f(){std :: co
..
级车辆{上市:虚拟虚空驱动器(){cout drive();返回0;} 我希望
..
谁能这么好,请解释一下为什么这段代码显示 Derived.DoWork(double).我可以对此行为提出一些解释,但是我希望有人为我澄清一下. 使用系统;公共课基地{公共虚拟虚空DoWork(int param){Console.WriteLine("Base.DoWork");}}公共类派生:基础{公共重写void DoWork(int param){Console.WriteLine("D
..
我有一个带有get_p_pow方法的模板基类,该方法由foo函数调用: template class base { public: int foo() { ... get_p_pow(p_pow, delta_p); ... } ... prot
..