常用重载

struct Node{
    int v,c;
    bool operator < (const Node&a)const{
        return c!=a.c?c>a.c:v<a.v;
    }
};

必须加const否则报错
在这里插入图片描述

struct cmp{
    bool operator()(const pair<int,int>&a,const pair<int,int>&b)const{
        return a.second!=b.second?a.second>b.second:a.first<b.first;
    }
};
priority_queue<pair<int,int>,vector<pair<int,int>>,cmp>q;
<think>好的,用户之前已经询问了重载和重写的概念,现在他们想知道有没有常用的API用到这两个特性。我需要先回顾一下之前的对话,确保回答连贯。 首先,用户可能在学习面向对象编程,特别是Java,因为之前的例子是用Java写的。现在他们想知道实际应用中的例子,这样能帮助他们理解理论如何应用到实际中。 接下来,我需要考虑常用的API,比如Java标准库中的例子,因为这些是学习者常见的接触点。比如,Java的System.out.println方法就有很多重载版本,处理不同的数据类型。这可以作为重载的典型例子。 对于重写,常见的例子是Object类的toString方法。几乎每个类都会重写这个方法,提供自己的字符串表示。另一个例子是集合框架中的ArrayList或HashMap,它们可能重写父类的方法以实现特定行为。 另外,用户可能想知道为什么这些API要使用重载和重写,这样他们能理解设计的好处。比如,重载提供同一方法名处理不同参数类型的便利,而重写支持多态,允许子类定制行为。 需要区分重载和重写的不同应用场景。重载在同一个类中增加方法的多样性,而重写是在子类中改变父类方法的行为。举一些具体的API例子,比如Java的String类的valueOf方法有多个重载,或者Servlet的doGet/doPost方法在HttpServlet中的默认实现被开发者重写。 可能还需要提到框架中的例子,比如Android的onCreate方法,或者Spring框架中的回调方法,这些通常需要开发者重写以实现特定逻辑。 要注意回答的结构,先分别给出重载和重写的API例子,再总结它们的作用。确保例子具体且常见,方便用户理解和记忆。同时,保持语言简洁,避免技术术语过多,必要时解释每个例子如何应用了重载或重写。 最后,检查是否有遗漏的重要例子,或者是否需要进一步说明两者的区别和实际应用中的重要性。确保回答能够帮助用户将理论联系实际,加深对概念的理解。</think>在常用的编程语言和API中,**重载(Overload)**和**重写(Override)**被广泛使用,它们的设计使代码更灵活、可读性更强,同时支持多态性。以下是实际开发中常见的例子: --- ### **1. 重载(Overload)的常见应用** 重载主要用于同一功能需要处理不同参数类型的场景,典型例子包括: #### **Java标准库中的`System.out.println`** ```java System.out.println("Hello"); // 输出字符串 System.out.println(100); // 输出整数 System.out.println(3.14); // 输出浮点数 System.out.println(new Object()); // 输出对象(调用其`toString()`) ``` - **原理**:`println`方法被重载为多个版本,接受不同参数类型(`int`、`double`、`String`、`Object`等)。 #### **`String.valueOf()`方法** ```java String s1 = String.valueOf(10); // 将int转为String String s2 = String.valueOf(true); // 将boolean转为String ``` - **原理**:`valueOf`方法被重载以支持所有基本类型和对象。 #### **集合类中的`add`方法** ```java List<Integer> list = new ArrayList<>(); list.add(1); // 添加单个元素 list.add(2, 3); // 在指定位置插入(参数数量不同,需注意具体API) ``` - **注意**:不同集合类的重载可能有细微差异(如`List.add`和`Queue.add`)。 --- ### **2. 重写(Override)的常见应用** 重写主要用于子类扩展或修改父类的行为,典型例子包括: #### **Java中`Object.toString()`的重写** ```java public class Person { private String name; @Override public String toString() { return "Person{name='" + name + "'}"; // 重写默认的Object.toString() } } ``` - **作用**:几乎所有自定义类都会重写`toString()`,以提供有意义的字符串表示。 #### **Servlet中的`doGet`和`doPost`方法** ```java public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { // 自定义GET请求处理逻辑 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) { // 自定义POST请求处理逻辑 } } ``` - **原理**:`HttpServlet`的`doGet`和`doPost`默认返回错误,开发者必须重写以实现业务逻辑。 #### **Android的`Activity.onCreate()`** ```java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 初始化界面 } } ``` - **作用**:Android生命周期方法必须重写以定义组件行为。 --- ### **3. 同时使用重载和重写的场景** #### **集合框架中的`equals`和`hashCode`** - **重写**:自定义类需要重写`Object.equals()`和`Object.hashCode()`以支持对象比较。 - **重载**:某些集合类可能重载`equals`方法(但需谨慎,需符合规范)。 #### **Java 8+的`Optional`类** ```java Optional<String> opt1 = Optional.of("Hello"); // 非空值(重载) Optional<String> opt2 = Optional.empty(); // 空值(重载) ``` - 重载`of()`、`ofNullable()`等方法,提供不同参数类型的处理。 --- ### **总结** - **重载的典型场景**: 同一功能需要支持多种参数类型(如输入输出、类型转换、工具方法)。 - **重写的典型场景**: 子类需要修改父类行为(如框架生命周期方法、对象核心方法)。 **核心价值**: 1. 重载:降低方法命名冗余,提高代码可读性。 2. 重写:实现多态性,支持框架扩展和定制(如Spring、Android、Servlet)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值