静态类型和动态类型
静态类型:表达式在编译时类型是已知的,它是变量声明时和表达式生成的类型;
动态类型:表达是表达式在内存中的类型;
如果表达式不是指针或引用,则它的静态类型和动态类型永远一样。
/*person的静态类型是Person,它的动态类型可能是Student,Teacher...*/
string job=person.job()
函数区别
项目 | 普通函数 | 虚函数 | 纯虚函数 |
---|---|---|---|
基类定义 | void f() | virture void f() | virture void f()=0 |
子类定义 | void f() | virture void f() void f() override | virture void f() void f() override |
调用时机 | 编译时 | 运行时 | 运行时 |
调用对象 | 静态类型 | 动态类型 | 动态类型 |
是否可定义对象 | √ | × | × |