这个问题在一个网站上被问到,我认为它必须有一个关于它的信息,因为当我们创建一个抽象类时,它是纯虚函数必须在派生类中实现的条件。基地是否有关于从他们派生的类的任何信息?
回答
基类没有关于它们的子类的任何信息。 它的子类有关于基类的信息。
取决于你对信息的意思。通过[CRTP](https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern),基类可以访问派生类的所有公共成员。 – NathanOliver
@NathanOliver是的,我的意思是在Regular。对不起,没有指定。 –
@NathanOliver我不知道CRTP。很有意思! –
一般来说它取决于你的名字“信息” 如果你已经声明了一个基类中的虚函数 你可以说编译基类中生成一个跳转列表,当您从基类派生,并声明函数是什么它具有与虚拟基类函数相同的声明,编译器只需将派生类中的函数地址放置到基类中的该跳转列表中即可。 这当然是由派生类完成的。
如果您有继承链,最后一个实例化的类将放置其函数的地址。而当基类试图调用函数时,它只是使用跳转列表跳转到正确的函数。
您使用CRTP还是常规继承? – NathanOliver
父类不需要知道有关子类的任何信息,只要*编译器*知道所有这些就足够了。 –