C++类的函数重载和函数重写探究

本文详细介绍了C++中的函数三要素,并对比了函数重载与重写的概念及应用场景。阐述了函数重载如何通过参数差异来区分同名函数,而函数重写则强调在继承关系中实现相同签名函数的不同行为。此外,还探讨了多态的实现条件。
部署运行你感兴趣的模型镜像

1.首先介绍函数三要素,函数重载,函数重写的概念

 .   函数三要素:函数名,返回类型,函数参数。

 .   函数重载:两个函数的函数名相同,函数参数不同,函数体不同。

.    函数重写:函数名,返回类型,函数参数都必须相同,但函数体可以实现不同功能。

 

2.C++类的函数重载

1)必须在同一个类中进行;

2)子类无法重载父类的函数,父类同名函数将被名称覆盖;

3)重载是在编译期间根据参数类型和个数决定函数调用。

 

3.C++类的函数重写

1)必须发生于父类与子类之间;

2)并且父类与子类中的函数必须有完全相同的原型;

3)函数重写又分为虚函数重写和重定义:

     1)虚函数重写:使用virtual声明的函数重写,之后能够产生多态(动态链编);

     2)重定义:没有virtual关键字的函数重写叫作重定义(静态链编)。

 

4.多态是在运行期间根据具体对象的类型决定函数调用的一种机制,多态成立的三个条件:

1有继承;

2)有virtual(虚函数)重写;

3)有父类指针(引用)指向子类对象。

 

 



您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

C++中,函数重载(Overloading)函数重写(Overriding)是两个面向对象编程中的重要概念,它们分别用于不同的场景,并且具有不同的实现机制。 ### 函数重载(Overloading) 函数重载是指在同一个作用域内定义多个具有相同名称但参数列表不同的函数。编译器会根据调用时传递的参数数量型来选择正确的函数函数重载通常用于实现相似但参数不同的操作。重载可以提高代码的可读性灵活性,使得同一个函数名可以用于不同型或数量的参数 [^2]。 #### 函数重载示例 ```cpp #include <iostream> void print(int i) { std::cout << "Integer: " << i << std::endl; } void print(double d) { std::cout << "Double: " << d << std::endl; } void print(const std::string& s) { std::cout << "String: " << s << std::endl; } int main() { print(10); // 调用 void print(int) print(3.14); // 调用 void print(double) print("Hello"); // 调用 void print(const std::string&) return 0; } ``` ### 函数重写(Overriding) 函数重写是指派生重新定义基中的虚函数,以提供不同的实现。重写是实现多态性的关键机制之一。要进行函数重写,需要满足以下条件: - 基中的函数必须声明为虚函数。 - 派生中的函数必须使用相同的函数名、参数列表返回型。 - 派生中的函数必须声明为虚函数,尽管不是必需的,但是最好使用 `override` 关键字进行显式标记,以确保它是对基虚函数重写 [^4]。 #### 函数重写示例 ```cpp #include <iostream> class Base { public: virtual void show() { std::cout << "Base class show function" << std::endl; } }; class Derived : public Base { public: void show() override { std::cout << "Derived class show function" << std::endl; } }; int main() { Base base; Derived derived; base.show(); // 调用 Base::show() derived.show(); // 调用 Derived::show() Base* basePtr = &derived; basePtr->show(); // 通过基指针调用 Derived::show(),体现多态性 return 0; } ``` ### 函数重载函数重写的区别 | 特性 | 函数重载(Overloading) | 函数重写(Overriding) | |--------------------|--------------------------------------------|-------------------------------------------------| | 定义位置 | 同一个或作用域内 | 不同中(基与派生) | | 函数名 | 相同 | 相同 | | 参数列表 | 必须不同 | 必须相同 | | 返回型 | 可以不同 | 必须相同 | | 访问权限 | 无特殊要求 | 基函数必须为虚函数 | | 多态性 | 不涉及多态 | 是实现运行时多态的关键 | | 关键字 | 无 | 通常使用 `override` 关键字 | ### 使用场景 - **函数重载**:适用于需要为不同的参数型或数量提供相同功能的函数,提高代码的可读性灵活性。 - **函数重写**:适用于需要在派生中提供基虚函数的不同实现,支持多态行为,使得程序能够更加灵活地处理对象型 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值