我认为它可以被看作是一种临时多态,就像重载函数(?)一样,但它在哪方面是普遍的多态呢?
发布于 2011-01-09 13:25:49
如果某物是多态的,它有许多形状。
在计算机科学中,多态是一种编程语言特性,允许使用统一的接口处理不同数据类型的值。
正如这链接所解释的,有不同类型的多态性。当接口定义不同的实现时,我们称之为Ad多态性,这取决于有限范围的单独指定的类型和组合。函数重载和默认参数就是一个很好的例子。
通用多态分为参数多态(当接口是独立于类型的--模板就是这方面的一个很好的例子)和包含多态(当一种数据类型可以作为另一种数据类型处理,即典型的OOP多态性,其中派生类可以作为基类处理时)。
当涉及到C++中的默认函数参数时,ad多态性是非常明显的。通用多态性可能来自这样一个事实:您可以使用C++的包含多态特性和函数参数:
void a_function (const char* print_me, Car* pCar = NULL)
{
std::cout << print_me << std::endl;
if(pCar)
pCar->Drive();
} 现在,我们可以这样调用这个函数:
a_function("Hello World!");它只需打印"Hello!“,或者我们可以这样称呼它:
Car mycar;
a_function("Hello World!", &mycar);它也能驾驶汽车。这是特别的多态。由于C++的包含多态性,您也可以这样做:
class DieselTruck : public Car
{
// ...
};就这样叫它:
DieselTruck mytruck;
a_function("Hello Earth!", &mytruck);它将驱动卡车(当然,如果正确设置了类--虚拟函数等等)。所以你可以用这种方式将即席多态和通用多态混合在一起。不管你的教授是不是这么想的,我不知道。它并不直接连接到默认参数--也就是说,没有它们,您可以很好地完成这一任务,但是,再说一遍,我不知道如何使用默认参数在C++中实现通用的多态。
发布于 2011-01-09 11:47:41
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);2)我也直到今天才遇到ad多态这个词,但我认为它是临时的,因为我们可以使用的类型的数量,以及你可以使用它的方式的数量都是预先决定的。
https://stackoverflow.com/questions/4638852
复制相似问题