面向对象编程主要包含三个特性:封装、继承、多态。
1.封装
可以将不同的属性和方法封装为不同的类,来实现对不同对象的描述。
2.继承
基类可以派生出派生类,对于派生类来说,继承于基类,拥有基类的变量和方法,还可以扩展自己独有的变量和方法以及对其进行覆盖。(子类使用父类的方法)
3.多态
基类的方法可以根据继承的类不同呈现出不同的状态。(父类使用子类的方法)
多态涉及句柄赋值,当讲子类的句柄赋值给父类句柄,父类对象的内存空间就会被释放,指向子类对象的内存空间;此时,子类对象转换为父类对象,称为向上转换。如果一个function或task被virtual修饰,这个function可以根据句柄指向对象类型,转变为不同的状态。
子类在创建时,子类空间会同时生成父类的内存空间和子类新增或覆盖变量的内存空间。在进行向上转化时,父类句柄指向子类空间的父类空间部分,句柄调用的变量仍是父类的变量。父类句柄调用的方法,如果被virtual修饰,则指向子类空间的方法以及变量(指向子类覆盖的变量是因为,新定义的方法可能用到新的变量,需要使用子类的变量)。否则,如果没有被virtual修饰,则父类句柄调用的方法使用的是父类的方法和涉及的变量。
向下转换指的是,父类句柄赋值给子类句柄,父类对象会转换为子类对象,由于父类对象内部空间小于子类对象,需要使用cast来进行转换,否则会出现编译错误。