#include <iostream>
#include <functional>
class A
{
public:
virtual std::string clsname(){return "A";}
std::string clsname2(){return "A";}
void test()
{
std::cout<<"A,"<<clsname()<<","<<clsname2()<<std::endl;
}
};
class B : public A
{
public:
std::string clsname() override {return "B";}
virtual std::string clsname2(){return "B";}
virtual void test()
{
std::cout<<"B,"<<clsname()<<","<<clsname2()<<std::endl;
}
};
class C : public B
{
public:
std::string clsname() override {return "C";}
virtual std::string clsname2(){return "C";}
void test()
{
std::cout<<"C,"<<clsname()<<","<<clsname2()<<std::endl;
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
A aa;
B b;
C c;
A d = c;
b.test();
c.test();
d.test();
((A&)c).test();
((B&)c).test();
std::bind(&A::test,&b)();
std::bind(&A::test,&c)();
std::bind(&B::test,&b)();
std::bind(&B::test,&c)();
return a.exec();
}
输出结果: