【发布时间】:2011-04-18 00:25:30
【问题描述】:
正如在第 12.2.5 节中的 The c++ Programming Language 3rd Edition 中所讨论的那样,与使用虚函数和多态性的等效代码相比,类型字段往往会创建通用性较差、容易出错、直观性和可维护性较差的代码。
作为一个简短的示例,以下是类型字段的使用方式:
void print(const Shape &s)
{
switch(s.type)
{
case Shape::TRIANGE:
cout << "Triangle" << endl;
case Shape::SQUARE:
cout << "Square" << endl;
default:
cout << "None" << endl;
}
}
显然,这是一场噩梦,因为向其中添加一种新的形状以及十几个类似的功能会容易出错且费力。
尽管存在这些缺点以及 TC++PL 中描述的那些缺点,但是否有任何示例表明这种实现(使用类型字段)比利用虚函数的语言特性更好? 或者这种做法应该被列为纯粹的邪恶吗?
现实的例子比做作的例子更受欢迎,但我仍然对做作的例子感兴趣。另外,你有没有在生产代码中看到过这种情况(即使虚函数会更容易)?
【问题讨论】:
-
在惯用的 C++ 中,您将通过引用而不是指针传递形状。事实上,您很可能会使用 const 引用。
-
我见过这种事情是在老 c 程序员编写的代码中完成的。我怀疑他们不知道更好的方法,或者不想学习。
-
-1:没有人应该写任何语言功能是“纯粹的邪恶”
-
@Jay:这不是“语言功能”,它是多种语言功能的潜在应用。在任何图灵完备的语言中,你肯定可以做一些符合“纯粹邪恶”的事情。
-
@Jay:好吧,那是一个不纯的邪恶。 :-)
标签: c++ code-organization