20200405_重载和重写

每日小知识

米格尔·格林贝格,近30年开发经验的软件工程师,以撰写Python项目开发的博客而广为Python开发者所熟知,经常受邀在PyCon等大会上分享开发经验。代表作有《Flask Web开发:基于Python的Web应用开发实战》(第2版)

一、相关术语

  • 重载
    C++允许在同一范围中声明几个功能类似的同名函数,但是它们的形参不同,即同一个函数名可以实现不同的行为。这种函数就叫作重载函数。
  • 重写(覆盖)
    重写,又叫覆盖,是由子类函数重新实现父类virtual函数的一种方式。

二、笔试题

1、重载与重写的区别。
答:(一)定义上的区别:重载是指不同的函数使用相同的函数名,但参数列表不同。
重写,又名覆盖,是指在派生类中重新对基类中的虚函数重新实现,参数列表相同,但函数体不同。

(二)规则上的区别:重载的规则是:参数列表必须不同。

(三)命名上的区别:
重载,overloading。重写,overwriting。

2、多态的作用。

答:(一)隐藏实现细节,使代码可以模块化。扩展代码模块,实现可重用。
(二)接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

3、new、delete和malloc、free的联系与区别。
答:联系:都是在堆上进行动态的内在操作。
区别:malloc需要指定内存分配的字节,且不能初始化对象。
new会自动调用对象的构造函数,delete会自动调用对象的析构函数。
free不会调用对象的析构函数。

知识扩展


本文归类

建议归类到【C++】。

明日计划

1、#define DOUBLE(x)x+x。
2、哪些情况只能用initialization而不能用assignment?
3、C++是不是类型安全的?