#include <iostream>
#include <functional>
using namespace std;
using Func = function<void()>;
class Base
{
public:
Func func_;
Base(): func_(std::bind(&Base::print, this))
{
cout << "Base output..." << endl;
}
virtual void print() = 0;
};
class Sub: public Base
{
public:
Sub(): Base()
{
cout << "Sub output..." << endl;
func_();
}
void print()
{
cout << "sub print." << endl;
}
};
int main(int argc, char **argv)
{
Sub sub;
return 0;
}
父类在初始化的时候绑定了类成员变量的函数指针,该函数是虚函数。 子类通过多态进行父类虚函数的print()函数实现。 当子类进行初始化的时候,父类先初始化,bind()将父类的函数print指针指向了子类的实现,因此父类的类成员变量func_指向了子类。此时能够输出"sub print." 的字符。
虽然在父类绑定了父类的虚函数,但是子类初始化的时候,将父类指向了子类的函数实现