#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." 的字符。
虽然在父类绑定了父类的虚函数,但是子类初始化的时候,将父类指向了子类的函数实现
博客介绍了C++中父类初始化时绑定类成员变量的虚函数指针,子类通过多态实现父类虚函数print()。子类初始化时,父类先初始化,bind()使父类函数指针指向子类实现,最终可输出' sub print.'字符,体现了父类虚函数指向子类实现的特性。
3060

被折叠的 条评论
为什么被折叠?



