C语言中纯虚函数和抽象类是如何定义和使用的?