草庐IT

C++父类调用子虚函数

我想要一个纯虚拟父类来调用函数的子实现,如下所示:classparent{public:voidRead(){//readstuff}virtualvoidProcess()=0;parent(){Read();Process();}}classchild:publicparent{public:virtualvoidProcess(){//processstuff}child():parent(){}}intmain(){childc;}这应该可以,但我得到一个未链接的错误:/这是使用VC++2k3或者它不应该工作,我错了吗? 最佳答案

C++父类调用子虚函数

我想要一个纯虚拟父类来调用函数的子实现,如下所示:classparent{public:voidRead(){//readstuff}virtualvoidProcess()=0;parent(){Read();Process();}}classchild:publicparent{public:virtualvoidProcess(){//processstuff}child():parent(){}}intmain(){childc;}这应该可以,但我得到一个未链接的错误:/这是使用VC++2k3或者它不应该工作,我错了吗? 最佳答案

c++ - 异常规范如何影响虚拟析构函数覆盖?

C++标准规定了以下关于具有异常规范的虚函数:Ifavirtualfunctionhasanexception-specification,alldeclarations,includingthedefinition,ofanyfunctionthatoverridesthatvirtualfunctioninanyderivedclassshallonlyallowexceptionsthatareallowedbytheexception-specificationofthebaseclassvirtualfunction(C++03§15.4/3).因此,以下格式不正确:stru

c++ - 异常规范如何影响虚拟析构函数覆盖?

C++标准规定了以下关于具有异常规范的虚函数:Ifavirtualfunctionhasanexception-specification,alldeclarations,includingthedefinition,ofanyfunctionthatoverridesthatvirtualfunctioninanyderivedclassshallonlyallowexceptionsthatareallowedbytheexception-specificationofthebaseclassvirtualfunction(C++03§15.4/3).因此,以下格式不正确:stru

c++ - 为什么允许通过基类的指针调用派生类的私有(private)虚方法?

#includeusingnamespacestd;classA{public:virtualvoidf(){coutf();return0;}此代码正常工作并打印B::f()。我知道它是如何工作的,但为什么允许这段代码? 最佳答案 访问控制在编译时执行,而不是运行时。对f()的调用通常无法知道ptr指向的对象的运行时类型,因此不会检查派生类的访问说明符。这就是允许调用的原因。至于为什么允许使用私有(private)函数覆盖B类-我不确定。当然B违反了从A继承的接口(interface),但通常C++语言并不总是强制接口(inter

c++ - 为什么允许通过基类的指针调用派生类的私有(private)虚方法?

#includeusingnamespacestd;classA{public:virtualvoidf(){coutf();return0;}此代码正常工作并打印B::f()。我知道它是如何工作的,但为什么允许这段代码? 最佳答案 访问控制在编译时执行,而不是运行时。对f()的调用通常无法知道ptr指向的对象的运行时类型,因此不会检查派生类的访问说明符。这就是允许调用的原因。至于为什么允许使用私有(private)函数覆盖B类-我不确定。当然B违反了从A继承的接口(interface),但通常C++语言并不总是强制接口(inter

c++ - 了解虚拟基类和构造函数调用

我对虚拟基类的工作方式有点困惑。特别是,我想知道如何调用基类的构造函数。我写了一个例子来理解它:#include#includeusingstd::string;structA{strings;A(){}A(stringt):s(t){}};structB:virtualpublicA{B():A("B"){}};structC:virtualpublicA{};structD:publicB,publicC{};structE:publicC,publicB{};structF:publicB{};intmain(){Dd;printf("\"%s\"\n",d.s.c_str())

c++ - 了解虚拟基类和构造函数调用

我对虚拟基类的工作方式有点困惑。特别是,我想知道如何调用基类的构造函数。我写了一个例子来理解它:#include#includeusingstd::string;structA{strings;A(){}A(stringt):s(t){}};structB:virtualpublicA{B():A("B"){}};structC:virtualpublicA{};structD:publicB,publicC{};structE:publicC,publicB{};structF:publicB{};intmain(){Dd;printf("\"%s\"\n",d.s.c_str())

c++ - 模板可能不是 ‘virtual’

鉴于下面的代码,编译器会显示一条消息,指出错误:模板可能不是“虚拟”。有人对如何解决这个错误有建议吗?templateclassCFoo{public:...templatevirtualvoiddoSomething(constCBar&);//here'stheerror...virtual~CFoo();protected:MyClass*m_pClass;};templatetemplatevoidCFoo::doSomething(constCBar&refBar){...} 最佳答案 了解为什么这是非法的最简单的原因是考

c++ - 模板可能不是 ‘virtual’

鉴于下面的代码,编译器会显示一条消息,指出错误:模板可能不是“虚拟”。有人对如何解决这个错误有建议吗?templateclassCFoo{public:...templatevirtualvoiddoSomething(constCBar&);//here'stheerror...virtual~CFoo();protected:MyClass*m_pClass;};templatetemplatevoidCFoo::doSomething(constCBar&refBar){...} 最佳答案 了解为什么这是非法的最简单的原因是考