运算符重载是 C++ 语言静态多态的一种典型体现,而使用 C 语言则无法实现运算符重载。
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
【考点】运算符重载|静态多态|C++语言特性
八级 C++ 语言模块,考查运算符重载与静态多态的关联。命题人卡住了“多态类型”这个概念——动态多态靠虚函数,静态多态靠模板或重载,而运算符重载本质是函数重载,属于静态多态。
判断两句话:第一句,运算符重载本质是函数重载,重载发生在编译期,正是静态多态的典型形式;第二句,C 语言没有类和函数重载机制,确实无法定义"operator+"这样的函数,所以错误。
常见陷阱是把运算符重载误认为动态多态,动态多态需要虚函数和运行时绑定,而重载是编译期符号解析;另外,部分同学误以为 C 语言能重载运算符,其实 C 没有类,也没有函数重载,只有函数声明和实现,符号名必须唯一。
如果改成“运算符重载是动态多态”,答案就反了;或者问“模板函数重载是否属于静态多态”,本质一样。刷到这类题先问:重载是编译期还是运行期?多态分静态还是动态?