草庐IT

overriding

全部标签

c# - "C# base class virtual function"- "override in Managed C++ ref class"

我有一个.NET_4ManagedC++ref类,它派生自用C#编写的.NET_4基类。C#基类:namespaceCore{publicclassResourceManager{publicclass_Resource{publicvirtualvoidDelete(){}}}}托管C++类:namespaceInput.DI{publicrefclassMouse:ResourceManager::_Resource{public:virtualvoidDelete(){}};}这是我遇到的错误:'Input::DI::Mouse::Delete':matchesbaserefcl

c++ - 为什么我的虚拟方法没有被覆盖?

classBase{public:Base(){cout输出是:baseclassfunofbasederiveclassfunofderive为什么第二行不是derive的乐趣? 最佳答案 当您在基类构造函数中调用fun()时,派生类尚未构造(在C++中,首先构造一个构造的父类),因此系统没有实例尚未派生,因此Derived::fun()的虚函数表中没有条目。这就是为什么通常不赞成在构造函数中调用虚函数的原因,除非您特别想要调用虚函数的实现,该虚函数是当前正在实例化的对象的一部分或一个对象的一部分它的祖先。

C++ 重载和覆盖

此代码生成以下编译错误:error:nomatchingfunctionforcallto'C::print(int)'你能帮我弄清楚编译器产生那个错误的过程吗,(为什么它忽略了类B中的函数)#includeusingstd::cout;classA{public:virtualvoidprint(){coutprint(5);} 最佳答案 print的每个后续定义都隐藏了其父级的定义。您需要一个using语句来取消隐藏它:classA{public:virtualvoidprint(){coutDemo您的指针指向C*,而不是B*

c++ - 为什么 C++11 override 和 final 不是属性?

我不知何故错过了C++11中引入的属性。现在我发现了,我想知道为什么override和final被添加为具有特殊含义的标识符,而不是作为标准属性。override的目的是产生编译时错误,这也是许多标准属性的目的。感觉好像它们符合这个概念,但我可能没有找到它的原因。 最佳答案 他们曾经是,在他们因评论而改变之前US44在C++11的FCD上:Evenifattributescontinuetobestandardizedovercontinuedobjectionsfrombothofthetwovendorswhoareciteda

c++ - 关于名称隐藏和虚函数的混淆

引用另一个soquestion考虑代码:classBase{public:virtualvoidgogo(inta){printf("Base::gogo(int)\n");};virtualvoidgogo(int*a){printf("Base::gogo(int*)\n");};};classDerived:publicBase{public:virtualvoidgogo(int*a){printf("Derived::gogo(int*)\n");};};intmain(){//1)Derived*obj=newDerived;obj->gogo(7);//thisisill

c++ - 如何覆盖非虚函数?

override的全新语法允许编译器在没有真正override虚函数时报告错误N3206.classBase{virtualvoidvfunc();voidafunc();};以下情况将在classDerived:publicBase中出错,如Std示例中所述:voidvfunk()覆盖;//错误:打字错误voidvfunc(int)覆盖;//错误:参数voidvfunc()常量覆盖;//错误:简历但是如果基方法不是虚拟的呢?voidafunk()覆盖;//?voidafunc(int)覆盖;//?voidafunc()constoverride//?; 最

c++ - 为什么覆盖在 C++ 中是可选的?

我了解C++override的目的,但是与其他默认需要使用它的高级语言相比,它的实现有点令人困惑。C++11wikipage将其描述为“声明符属性的技术标识符”,但没有详细说明为什么它不仅仅是该语言的关键字。 最佳答案 保持与C++03的向后兼容性是可选的。使其成为非可选的会破坏所有代码*。同样,将override设为关键字会破坏任何使用名称override的代码。好的,不是字面上的全部代码,而是很多。 关于c++-为什么覆盖在C++中是可选的?,我们在StackOverflow上找到一

c++ - 显式覆盖虚函数

我刚刚发现C++/CLI有一个标准C++中不存在的关键字(AFAIK):override。我对C++/CLI了解不多,所以,有人可以解释一下它包含在其中的目的是什么,它是否是一个需要添加到C++的特性? 最佳答案 override是Microsoft的特殊关键字扩展,可用于C++/CLI和VisualC++实现。它类似于@OverrideJava注释或override在C#中,并提供更好的编译时检查,以防您没有覆盖您想要覆盖的内容。从第一个链接:overrideindicatesthatamemberofamanagedtypemu

c++ - 虚函数重载

我在一次采访中被问到这个问题。我无法在那里回答这个问题。我现在也无法理解为什么输出是这样的。这是代码:#includeusingnamespacestd;classBase{public:virtualvoidfun(intx=0){coutfun();d1.fun();d1.fun(1.2);return0;}以上代码的输出为:Base::fun(),x=0Derived::fun(),x=10Derived::fun(),x=1.2问题是:在第一种情况下,我们说fun()函数都被重载了(并且没有被覆盖,因为它们的声明不同)并且调用了基础fun(),但是fun()的这些声明不可能被重

c++ - 何时为多态类初始化 vptr(指向 vtable)?

这与"WhenVTABLEiscreated?"无关.相反,应该在什么时候初始化VPTR?是在构造函数的开头/结尾还是在构造函数之前/之后?A::A():i(0),j(0)-->>here?{-->>here?//...-->>here?} 最佳答案 虚拟调用的机制(通常是一个v表,但不需要)是在ctor-initializer期间、基础子对象构造之后和成员构造之前设置的。[class.base.init]部分法令:Memberfunctions(includingvirtualmemberfunctions,10.3)canbec