函数和多态性中的默认参数 为什么C++函数中的缺省参数可以被认为是多态性? >P>为什么考虑ad-hoc多态性和普遍多态性?

函数和多态性中的默认参数 为什么C++函数中的缺省参数可以被认为是多态性? >P>为什么考虑ad-hoc多态性和普遍多态性?,c++,polymorphism,C++,Polymorphism,我认为它可以被看作是一个特殊的多态性,就像它的重载函数一样(?),但它以什么方式是通用多态性呢 1)可以将其视为多态性,因为您有效地提供了调用同一函数的不同方法。考虑: int func(int a = 1, int b = 2, int c = 3, int d = 4); 我可以用以下方式来称呼它: func(); func(5); func(5, 6); func(5, 6, 7); func(5, 6, 7, 8); 这样,如果我们提供了这5种不同的方法而没有任何默认参数,则与函数重

我认为它可以被看作是一个特殊的多态性,就像它的重载函数一样(?),但它以什么方式是通用多态性呢

1)可以将其视为多态性,因为您有效地提供了调用同一函数的不同方法。考虑:

int func(int a = 1, int b = 2, int c = 3, int d = 4);
我可以用以下方式来称呼它:

func();
func(5);
func(5, 6);
func(5, 6, 7);
func(5, 6, 7, 8);
这样,如果我们提供了这5种不同的方法而没有任何默认参数,则与函数重载类似:

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);
void a_function (const char* print_me, Car* pCar = NULL)
{
    std::cout << print_me << std::endl;
    if(pCar)
        pCar->Drive();
} 

2) 直到今天,我也没有遇到过“特殊多态性”这个词,但我的观点是,它是特殊的,因为我们可以使用的类型的数量,以及使用它的方式的数量都是预先确定的。

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

在计算机科学中,多态性是一个重要的概念 编程语言的特点是 允许不同数据类型的值 用制服处理 接口

正如link所解释的,多态性有不同的类型。当一个接口根据有限的单独指定类型和组合定义不同的实现时,我们称之为即席多态性。函数重载和默认参数就是一个很好的例子

通用多态性分为参数多态性(当接口与类型无关时,模板就是一个很好的例子)和包含多态性(当一种数据类型可以被视为另一种数据类型时,即派生类可以被视为基类的典型OOP多态性)

< > C++中的缺省函数参数时,ad-hoc多态性非常明显。通用多态性可能来自这样一个事实:您可以将C++的包含多态特性与函数参数结合使用:

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);
void a_function (const char* print_me, Car* pCar = NULL)
{
    std::cout << print_me << std::endl;
    if(pCar)
        pCar->Drive();
} 
它只会打印“Hello World!”,或者我们可以这样称呼它:

a_function("Hello World!");
Car mycar;
a_function("Hello World!", &mycar);
DieselTruck mytruck;
a_function("Hello Earth!", &mytruck);
它还可以驾驶汽车。这就是即席多态性。由于C++的包含多态性,您还可以执行以下操作:

class DieselTruck : public Car
{
     // ...
};
这样称呼它:

a_function("Hello World!");
Car mycar;
a_function("Hello World!", &mycar);
DieselTruck mytruck;
a_function("Hello Earth!", &mytruck);

它将驱动卡车(当然,如果类设置正确的话——虚拟函数等等)。因此,您可以通过这种方式在函数中混合使用特殊多态性和通用多态性。我不知道你们教授是不是在想这个。它不直接连接到默认参数——即,没有它们,您可以做到这一点,但是,我再也看不出,仅使用默认参数,C++中如何实现通用多态性。p> 很多词。。。对于C/C++的一个特性,我使用较少的。什么是特殊多态性和通用多态性?从没听说过他们@纳瓦兹:我在谷歌上搜索了一下,发现了这样的东西:。。。但是没有,我也从来没有听说过!闻起来像是作业,这个问题太时髦了,不可能是真正的问题。@Oli:这就是为什么我说它是理论性的。我知道这两个术语,但仍然不明白为什么它可以被认为是通用多态性。非常感谢!我也有一种感觉,它与包含多态性有关。再次,非常感谢-解释得很好。