c++中,直接用重写就是了,为什么有时候非要用重定义(覆盖)?不都是子类重新定义父类相同名称的函数吗?
发布网友
发布时间:2022-05-06 09:31
我来回答
共1个回答
热心网友
时间:2023-10-08 23:49
首先要纠正下你的理解.
如果子类和父类2个函数签名相同,
1) 如果父类函数是virtual(虚函数), 那么子类函数是 "重写"
2) 如果父类函数不是virtual, 那么就是"重定义".
俩个函数关系是重写还是重定义, 要看父类函数是不是虚函数
也就是说:
1) 如果你需要动态绑定, 那么就把函数定义为virtual, 它的同名子类函数都是它的"重写"
2) 如果父类函数不是一个virtual函数, 但是你继承并且修改了这个函数, 你的行为就是重定义.
第2点比较少见, 通常不会去修改父类的非虚函数, 但是如果你只是想单纯的继承父类的代码, 而不期待动态绑定的话, 可以这么做, (例如继承标准库的std::vector, 如果你懒得写接口的话, 不过使用的话还是需要谨慎, 毕竟这些类型不是被设计为基类的)