草庐IT

virtual-destructor

全部标签

C++: "Virtual"是否继承给所有后代

假设以下简单情况(注意virtual的位置)classA{virtualvoidfunc();};classB:publicA{voidfunc();};classC:publicB{voidfunc();};下面的调用会调用B::func()还是C::func()?B*ptr_b=newC();ptr_b->func(); 最佳答案 您的代码是无效的C++。类定义中的括号是什么?这取决于pointer_to_b_type指向的对象的动态类型。如果我理解您真正想问的问题,那么"is"。这调用C::func:Cc;B*p=&c;p->

c++ - 虚继承应该写 "public virtual"还是 "virtual public"?

基于http://en.wikipedia.org/wiki/Virtual_inheritanceclassAnimal{...};//TwoclassesvirtuallyinheritingAnimal:classMammal:publicvirtualAnimal{...};我还看到书籍使用以下语法,classMammal:virtualpublicAnimal{...};问题>哪个是C++标准?谢谢 最佳答案 来自ISO/IEC14882:2003(E)-10.1可以在类定义中使用以下符号指定基类列表:base-claus

VXLAN Ethernet Virtual Private Network集中式和分布式网关实验(华为设备)

实验场景1:VXLAN-EVPN集中式网关环境说明:Underlay通过OSPF互联,Overlay通过BGPEVPN建立隧道;Leaf1和Leaf2分别与Spine建立IBGP邻居关系,Spine作为路由反射器。Leaf1,Leaf2和Spine分别使用L0接口地址作为VTEP地址和BGPEVPN源地址。Leaf1的VTEP地址为1.1.1.1/32,Leaf2的VTEP地址为2.2.2.2/32,Spine的VTEP地址为3.3.3.3/32。Vlan10的子网范围为10.1.10.0/24,网关地址为10.1.10.254;Vlan20的子网范围为10.1.20.0/24,网关地址为10

c++ - 链接器错误 : wants C++ virtual base class destructor

我有一个链接错误,链接器提示说我的具体类的析构函数正在调用它的抽象父类(superclass)析构函数,而它的代码丢失了。这是在MacOSX上从XCode使用GCC4.2。我看到了g++undefinedreferencetotypeinfo但这并不完全相同。这是链接器错误消息:Undefinedsymbols:"ConnectionPool::~ConnectionPool()",referencedfrom:AlwaysConnectedConnectionZPool::~AlwaysConnectedConnectionZPool()inRKConnector.old:symbo

c++ - C++ 是否为纯虚拟类创建默认值 "Constructor/Destructor/Copy Constructor/Copy assignment operator"?

C++编译器是否为这个“类”生成默认函数,如Constructor/Destructor/Copy-Constructor...?classIMyInterface{virtualvoidMyInterfaceFunction()=0;}我的意思是不可能实例化这个“类”,所以我认为没有生成默认函数。否则,人们会说您必须使用虚拟析构函数。这意味着如果我不定义析构函数virtual它将默认创建,而不是virtual。此外,我想知道为纯虚拟接口(interface)定义虚拟析构函数是否合理,如上所示?(所以这里没有使用指针或数据,所以不需要破坏任何东西)谢谢。 最

c++ - constexpr 和 virtual

我一直在想为什么constexr和virtual是互斥的,有人补充说:...constexprisallaboutexecutionatcompiletime;ifwe'reexecutingthefunctionatcompiletime,weobviouslyknowthetypeofdatauponwhichit'sactingatcompiletimeaswell,solatebindingclearlyisn'trelevant.但是,即使在编译时,动态类型也可能与静态类型不同,并且可能存在需要动态类型的情况:classA{public:/*virtual*/constexp

c++ - 为什么 C++ 中的虚函数称为 'virtual' ?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。所以我对C++中虚函数的概念和像this这样的线程是新手做好销售这个概念。好的,我相信。但是为什么虚函数被称为“virtual”呢?我的意思是这样的功能是“具体的”像往常一样的功能/方法不是吗?如果有人能解释这个词的选择用“虚拟”来命名这个概念,那就太好了。

c++ - 是否可以在不对抽象的父类中的函数使用 virtual 关键字的情况下覆盖 C++ 子类中的函数?

classParent{public:voidfunc1();//Completemeaningfuldefinitioninparentgiven.virtualHRESULTfunc2()=0;//BcozofthisfunctionParentclassisabstract.};classChild:publicParent{public:voidfunc1();//Differentdefinitioninchild.};这在C++中可行吗?我正在重写func1(),它不是虚拟的,它已经在父抽象类中有一个定义。 最佳答案 [

C++多态/继承问题: Redefinition of base functions vs virtual functions

我知道派生类可以简单地“重新定义”基类成员函数,并且当派生类对象的函数是被调用,派生类中定义的函数被使用,但是......这不会使“virtual”关键字变得多余吗?我读过这两种情况之间存在一些明显的显着差异(即:如果你有一个指向派生类的基类指针,你调用一个函数,如果它是虚拟的,则派生类函数将是调用,但如果不调用,将调用基类函数)。换句话说,能够重新定义成员的目的是什么用作非虚拟函数,这是一个常用的练习?就我个人而言,这似乎会变得非常困惑。谢谢! 最佳答案 对于最常见的OOP语言(Java、SmallTalk、Python等),最常

c++ - "temporary of type ' A ' has protected destructor", 但它的类型是 B

在以下代码中,使用Clang8.0.0+和-std=c++17编译,使用B{}创建派生类实例会报错错误:'A'类型的临时对象具有protected析构函数。当临时文件的类型为B(因此应该有一个公共(public)析构函数)时,为什么A会出现在此消息中?https://godbolt.org/z/uOzwYaclassA{protected:A()=default;~A()=default;};classB:publicA{//canalsoomitthese3lineswiththesameresultpublic:B()=default;~B()=default;};voidfoo(