C++ 重载和重写的区别
导读:C++ 重载和重写的区别,今天为网友们详解的相关介绍,很不错的方法小知识,建议收藏哦! 在C++中,重载(Overloading)和重写(Overriding)是两个不同的概念,它们都是多态的实现方式,但应用
C++ 重载和重写的区别
今天为网友们详解的相关介绍,很不错的方法小知识,建议收藏哦!
在C++中,重载(Overloading)和重写(Overriding)是两个不同的概念,它们都是多态的实现方式,但应用的上下文和规则有所不同。
下面不念将通过具体的例子来解释这两个概念及其区别。

重载(Overloading)
重载是指在同一作用域内存在多个同名函数,但这些函数的参数列表(参数的数量或类型)不同。
特点:
- 发生在同一个类中或者在同一个作用域内。
- 函数名相同,但参数列表不同(参数类型、个数或者顺序不同)。
- 与函数的返回类型无关。
例子:
class Printer {
public:
void Print(int i) {
std::cout << "Integer: " << i << std::endl;
}
void Print(double f) {
std::cout << "Float: " << f << std::endl;
}
void Print(const std::string &s) {
std::cout << "String: " << s << std::endl;
}
};
// 使用
Printer printer;
printer.Print(10); // 调用 Print(int)
printer.Print(3.14); // 调用 Print(double)
printer.Print("Hello"); // 调用 Print(const std::string&)
重写(Overriding)
重写是指在派生类中重新定义基类中的虚函数(virtual function)。
重写的函数必须具有相同的签名(即相同的函数名、参数列表和返回类型)。
特点:
- 发生在基类和派生类之间。
- 函数名、参数列表和返回类型都必须相同。
- 基类中的函数必须是虚函数(使用
virtual关键字声明)。
例子:
class Animal {
public:
virtual void Speak() {
std::cout << "Animal speaks" << std::endl;
}
};
class Dog : public Animal {
public:
void Speak() override { // 重写 Speak()
std::cout << "Dog barks" << std::endl;
}
};
// 使用
Animal* animal = new Animal();
Animal* dog = new Dog();
animal->Speak(); // 输出 "Animal speaks"
dog->Speak(); // 输出 "Dog barks",调用的是 Dog 中
重写的 `Speak()` 方法
重载与重写的区别
- 定义位置:
- 重载:在同一个类中或同一作用域内。
- 重写:在派生类中对基类的虚函数进行重新定义。
- 函数签名:
- 重载:函数名相同,但参数列表必须不同。
- 重写:函数名、参数列表和返回类型都必须与基类中的虚函数相同。
- 目的和用途
相关阅读
-
内存卡修复工具哪个好 关于内存卡损坏了恢复办法
今日小编为你讲解内存卡修复工具哪个好和关于内存卡损坏了恢复办法方面的知识,一起来了解了解吧。 内存卡丢失数据用什么恢复软件好? 推荐使用云骑士数据恢复软件。它是一款可进行免
-
剪映怎么做封面照 剪映怎么选封面照片
下面为网友们详细介绍剪映怎么选封面照片方面的介绍,剪映选封面照片共需两个步骤,在编辑视频界面即可设置封面照片。具体操作步骤如下:
-
iphone11全系列参数对比 关于iphone各机型参数对比
文章摘要:iphone11全系列参数对比和关于iphone各机型参数对比方面的知识,接下来IT袋小编为大家介绍。 日前,苹果正式宣布,将于美国当地时间9月10日上午举办秋季新品发布会,发布全新iP
-
u盘工具哪个好 盘点u盘启动盘制作工具推荐
本文为你介绍u盘工具哪个好和盘点u盘启动盘制作工具推荐的电脑方面的小经验,下面小编为您详细解答 随着时代的发展,网络上出现了更多的U盘恢复工具,为大家解决了许多文件丢失的烦恼


