特性 | 重写(Override) | 重构(Refactoring) | 重载(Overloading) |
---|---|---|---|
定义 | 在派生类中提供与基类同名同参数的新方法实现 | 改进代码内部结构但不改变外在行为 | 在同一作用域内创建多个参数列表不同的同名函数 |
目的 | 实现多态,改变或扩展基类行为 | 提高代码可读性、可维护性 | 根据不同参数提供不同功能 |
使用场景 | 类继承关系中 | 任何需要改进代码的地方 | 提供函数的多个版本 |
相同点 | 涉及方法的实现 | 可能涉及方法的修改 | 涉及方法的实现 |
不同点 | 需要继承关系 | 不改变程序外在行为可继承可不继承 | 不需要继承关系,参数不同 |
1 重载
// python 语法糖
def buildUrl(uri, params=None):
if params :
else:
// c++ 重载 写两个同名函数不同参数个数
string Ok:: buildUrl(const std::string& uri, const std::map<std::string, std::string>& params) {
/*
不同参数个数 不能用python =None过滤. 能用重载 或 template<typename... Args>模板语法
*/
std::string url = _host + uri;
if (!params.empty()) {
std::string query;
for (const auto& param : params) {
query += param.first + "=" + param.second + "&";
}
query = query.substr(0, query.length() - 1); // 去除最后一个多余的"&"
url += "?" + query;
}
return url;
}
std::string Ok::buildUrl(const std::string& uri) {
return _host + uri;
}