首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数和多态中的默认参数

函数和多态中的默认参数
EN

Stack Overflow用户
提问于 2011-01-09 11:17:29
回答 2查看 937关注 0票数 2
  1. 为什么C++函数中的默认参数可以被认为是多态的?
  2. 为什么它被认为是即席多态和普遍多态性?

我认为它可以被看作是一种临时多态,就像重载函数(?)一样,但它在哪方面是普遍的多态呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-09 13:25:49

如果某物是多态的,它有许多形状。

在计算机科学中,多态是一种编程语言特性,允许使用统一的接口处理不同数据类型的值。

正如链接所解释的,有不同类型的多态性。当接口定义不同的实现时,我们称之为Ad多态性,这取决于有限范围的单独指定的类型和组合。函数重载和默认参数就是一个很好的例子。

通用多态分为参数多态(当接口是独立于类型的--模板就是这方面的一个很好的例子)和包含多态(当一种数据类型可以作为另一种数据类型处理,即典型的OOP多态性,其中派生类可以作为基类处理时)。

当涉及到C++中的默认函数参数时,ad多态性是非常明显的。通用多态性可能来自这样一个事实:您可以使用C++的包含多态特性和函数参数:

代码语言:javascript
复制
void a_function (const char* print_me, Car* pCar = NULL)
{
    std::cout << print_me << std::endl;
    if(pCar)
        pCar->Drive();
} 

现在,我们可以这样调用这个函数:

代码语言:javascript
复制
a_function("Hello World!");

它只需打印"Hello!“,或者我们可以这样称呼它:

代码语言:javascript
复制
Car mycar;
a_function("Hello World!", &mycar);

它也能驾驶汽车。这是特别的多态。由于C++的包含多态性,您也可以这样做:

代码语言:javascript
复制
class DieselTruck : public Car
{
     // ...
};

就这样叫它:

代码语言:javascript
复制
DieselTruck mytruck;
a_function("Hello Earth!", &mytruck);

它将驱动卡车(当然,如果正确设置了类--虚拟函数等等)。所以你可以用这种方式将即席多态和通用多态混合在一起。不管你的教授是不是这么想的,我不知道。它并不直接连接到默认参数--也就是说,没有它们,您可以很好地完成这一任务,但是,再说一遍,我不知道如何使用默认参数在C++中实现通用的多态。

票数 1
EN

Stack Overflow用户

发布于 2011-01-09 11:47:41

1)它可以被认为是多态,因为您实际上提供了不同的方法来调用相同的函数。考虑:

代码语言:javascript
复制
int func(int a = 1, int b = 2, int c = 3, int d = 4);

我可以这样称呼它:

代码语言:javascript
复制
func();
func(5);
func(5, 6);
func(5, 6, 7);
func(5, 6, 7, 8);

这样,如果我们提供了这5种不同的方法而没有任何默认参数,则类似于函数重载:

代码语言:javascript
复制
int func();
int func(int a);
int func(int a, int b);
int func(int a, int b, int c);
int func(int a, int b, int c, int d);

2)我也直到今天才遇到ad多态这个词,但我认为它是临时的,因为我们可以使用的类型的数量,以及你可以使用它的方式的数量都是预先决定的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4638852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档