【发布时间】:2020-01-03 09:43:20
【问题描述】:
Derived类的多个定义是不允许的,所以下面是编译时错误。
class A1
{ };
class A2
{ };
class Derived: public A1
{ };
class Derived: public A2
{ };
同样,为什么以下不是编译时错误?
Derived 类不会有 2 个版本,一个继承自 A1 而另一个继承自 A2?
class A1
{ };
class A2
{ };
template<class T>
class Derived: public T
{ };
int main()
{
Derived<A1> *ptr1 = new Derived<A1>;
Derived<A2> *ptr2 = new Derived<A2>;
}
【问题讨论】:
-
因为
Derived<T>,不同的T,是不同的类 -
@anurag86:模板参数是类型的一部分(并且它们与二进制文件中的类名混合在一起)
-
Derived不是类,是类模板;Derived<A1>和Derived<A2>是类;但不同。 -
“班级名称保持不变” 不是。你有两个不同的类:
Derived<A1>和Derived<A2>。Derived本身不是一个类,它是一个类模板。 “它没有被破坏。” 但它是?typeid(...).name()分别给了我7DerivedI2A1E和7DerivedI2A2E。 -
是的。只是在类中添加了几个函数并调用了它们。并运行
nm out|xargs c++filt|grep Derived并显示没有Derived但Derived<A1>和Derived<A2>。谢谢大家
标签: c++ templates inheritance