Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何可靠地调用直接父级';s虚函数_C++_Polymorphism_Overriding_Virtual - Fatal编程技术网

C++ 如何可靠地调用直接父级';s虚函数

C++ 如何可靠地调用直接父级';s虚函数,c++,polymorphism,overriding,virtual,C++,Polymorphism,Overriding,Virtual,考虑一下这个代码 class Base { public: virtual void print () { std::cout << "Base::print" << std::endl; } }; class BaseA : public Base { public: virtual void print () { std::cout << "BaseA::print" <<

考虑一下这个代码

class Base
{
public:
    virtual void print ()
    {
        std::cout << "Base::print" << std::endl;
    }
};

class BaseA : public Base
{
public:
    virtual void print ()
    {
        std::cout << "BaseA::print" << std::endl;
    }
};

class Derived : public Base
{
public:
    virtual void print ()
    {
        Base::print (); // <= this will always call Base::print even if I derive from BaseA
        std::cout << "Derived::print" << std::endl;
    }

};


int main ()
{
    Base* a = new Derived;
    a->print ();
    delete a;
}
类基
{
公众:
虚拟空打印()
{
std::cout使用typedef:

class Derived: public BaseA {
    typedef BaseA Base;
    ...
typedef test<myBaseClass> myDerivedClass;

当前不可能对类的直接基进行编译时自省,尽管有一些建议(例如)。

您可以尝试使用模板:

template <class base>
class test: public base
{
    virtual void testmethod()
    {
        base::testmethod();
    }
};
模板
类测试:公共基
{
虚拟void testmethod()
{
base::testmethod();
}
};
然后可以添加一个typedef:

class Derived: public BaseA {
    typedef BaseA Base;
    ...
typedef test<myBaseClass> myDerivedClass;
typedef测试myDerivedClass;

我注意到有关虚拟方法的问题越来越多。@Mark Garcia:一定是一个邪恶的阴谋。我们不应该给出答案——“他们”只会变得更强大。(说真的,如果这是一个重复的问题,可能是重复的,请将其标记为该问题,并引用原始问题。):)@DavidO这一切背后一定有人。我想你有个问题。你相信你总是想调用即时基类的虚拟函数,即使你现在不知道基类是什么。我的水晶球说你实际上只想为20个虚拟中的18个这样做,而这个解决方案n只是给了你一个新的问题,当你改变继承结构时,你只需要重新评估一切。