virtual-functions相关内容
我注意到如果我在我的程序中运行 strings ,它是由 g ++ 编译的,输出包含它使用的各种类。 该程序是用 -O3 编译的,没有 -g 或 -p ,并且当我去掉二进制文件时类名仍然存在。 我想知道为什么需要 g ++ 将这些信息存储在二进制文件中?目前所有的类名似乎都是使用虚拟函数的类,所以我怀疑这是与它有关的。 解决方案 这可能与 RTTI 有关,具体来说,RTTI允许您查询
..
class Bar { public: bool foo(int i){ return foo_(i); } private: virtual bool foo_(int i)= 0; }; 现在我想知道:为什么要使用这种间接方式?有没有什么理由可以说明上述会比简单的选择更好: class Bar { public: virtual bool fo
..
我有以下定义: class PartitioningMethod { public: virtual void addConstraints ConstraintManager& cm)= 0; virtual bool hasMoreConstraints()= 0; virtual void setQuery(const Query& q)= 0; virtual〜Pa
..
对于普通的实例方法,这也是可能的? 编辑 我想我还不够清楚。 我想做以下: @interface MyClass @property(retain)NSObject * somePropertyObject; - (void)myMethod; @end @implementation MyClass @dynamic somePropertyO
..
在虚拟构造函数中,有虚函数使用虚函数返回对象的新对象或对象的副本。但是然后调用这些虚函数的多态方式,你必须使用实际构造函数创建该类的对象。 在设计模式上下文中,这意味着客户端知道该类型使用对象创建的多态方式之前的对象? 解决方案 客户端不一定必须了解具体的类型。例如,考虑这个层次结构: struct Base { virtual〜Base(); virtual Ba
..
我知道这个问题在这些论坛上被评估了很多次,但是它们对于大多数时候的具体案例来说都是独一无二的。 这是一个类的项目在C ++中不少),而且这个项目的重点是重写经典的棋盘游戏Reversi。 我已经通过代码修剪了几个小时,最后制作了一个程序,工作,所以我想! 我遇到的大问题似乎来自我的解构程序,因为它给我这个错误,我们很多人看到。我的代码发布在下面和我自己的调试代码(使用有用的cou
..
我想在cuda内核中执行一些虚拟方法,而不是在同一个内核中创建对象,我想在主机上创建它,并将其复制到gpu内存。 我在内核中成功创建对象并调用了一个虚方法。复制对象时出现问题。这是有道理的,因为显然虚函数指针是假的。 发生什么是简单的“Cuda网格启动失败”,至少这是Nsight说。 但是当看看SASS时,它会对虚函数指针的取消引用崩溃。这是有道理的。 我当然使用Cuda 4.2以
..
为什么C ++没有虚拟构造函数? 解决方案 来自Bjarne Stroustrup的C ++风格和技术常见问题 为什么我们没有虚拟构造函数? 虚拟调用是一种机制工作完成给部分 信息。特别是,“virtual”允许我们调用一个函数 ,只知道任何接口,而不是对象的确切类型。要 创建一个对象,你需要完整的信息。特别是,你 需要知道你想创建的确切类型。因此, a“对构造函数的
..
我从ReSharper得到一个警告,从我的对象构造函数调用虚拟成员。 解决方案 (假设你在C#中写这篇文章) 当用C#编写的对象被构造时,发生的情况是初始化器按照从最大派生类到基类的顺序运行,然后构造函数按照从基类到最大派生类()。 此外,在.NET对象中更改类型,但是最先导出的类型,方法表为最派生类型。这意味着虚方法调用总是在最派生的类型上运行。 当你合并这两个事实
..
当我从基础构造函数调用虚函数时,编译器不会给出任何错误。但是当我从基类构造函数调用一个纯虚函数时,它会给出编译错误。 考虑下面的示例程序: #include using namespace std; class base { public: void virtual virtualfunc()= 0; // void virtual vi
..
我知道这个问题是非常基本的,但我已经在少数出版物(网站,书籍)遇到不同风格的覆盖虚拟功能。我的意思是:如果我有基类: class Base { public: virtual void f()= 0; }; 在某些出版物中,我看到要覆盖这些一些作者只会说: void f(); ,有些人仍然会在void之前重复virtual关键字。哪种形
..
假设我有一对基类: class A {}; class B { virtual void foo(A * ref); virtual void foo2(A * ref); }; 并且从他们,一些派生类: class C:virtual public A { int data; }; class D:public B
..
QUESTION 1) class Base { Base(std :: string名称); virtual std :: string generateName(); } class Derived:Base { Derived(); virtual std :: string generateName(); } 这里有一个问题:
..
我实际想要做的是将 moneypunct 转换到中的 punct_facet “http://stackoverflow.com/q/31291004/2642059\">此问题,无需编写复制构造函数,如此回答。 但是,为了撰写最小,完整,可验证的示例假设我有这两个类: class Parent { public: Parent(Complex& args); 父运算符=(co
..
我知道引入了 override contextual关键字来编写更安全的代码(通过检查 virtual 函数相同的签名),但我不觉得好,因为它似乎是多余的我写每覆盖每次我想覆盖 virtual 函数。 是不是不使用 override 为99%的病例?为什么/何时应该使用它(编译器警告是不够的,当我们错误地隐藏一个虚拟函数)? 换一种说法;在C ++ 11中使用 override c
..
我知道你不应该在基类的ctor或dtor中调用任何虚拟函数,但是从最派生类的角度来看呢?应该罚款吧?例如 class base { ... virtual void free()= 0; }; class child:public base { ... free(){/ * free memory * /} 〜child(){free();} }; 解
..
考虑一个简单的例子: struct FooParent { virtual void bar(){} }; struct Foo:FooParent { void bar(){} }; int main(){ Foo foo; void(Foo :: * foo_member)()=& FooParent :: bar; //(foo。* FooPare
..
首先,我想写一个run-of-the-mill,简单的Ray Tracer。在我的Ray Tracer中,我有多种类型的几何在世界上,所有派生于一个基类,称为“SceneObject”。 / ** 所有将出现在场景 * / 类SceneObject { public: mat4 M,M_inv; 颜色c; SceneObject(); 〜SceneObject()
..
我有以下定义: class PartitioningMethod { public: virtual void addConstraints ConstraintManager& cm)= 0; virtual bool hasMoreConstraints()= 0; virtual void setQuery(const Query& q)= 0; virtual〜Pa
..
给定以下代码 class T { public: virtual〜T } virtual void foo()= 0; }; class U { public: U(){} 〜U(){} void bar(){std :: cout ;& “bar”
..