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只是给了你一个新的问题,当你改变继承结构时,你只需要重新评估一切。