我有两个从基类Student
继承的派生类(Teacher
和People
)。
当我想声明2变量st
,tc
时带有指向People
的类型指针,但指向要添加到此链接的Student
和Teacher
类型的对象-Link:
class Node
{
private:
People* data;
Node* next;
};
所以我写道:
People * st = new Student(...);
People * tc = new Teacher(...);
现在我想编写一个复制构造函数来克隆st
,tc
(如People *st1 = st
或其他所有内容来克隆这些变量而不使用默认代码)所以我该怎么办?
谢谢!
p / s:抱歉我的英语不好。
答案 0 :(得分:1)
您可以编写执行以下操作的复制构造函数:
People p(*st);
p
的类型将是People
,而不是Student
。如果您要创建Student
,则可以将virtual
函数添加到名为People
的{{1}},如下所示:
clone
然后在每个派生类中实现它以返回派生类型的实例。这样你的用法就是:
class People {
...
virtual People *clone() = 0;
}
此处People *st = new Student();
People *stClone = st->clone();
的类型为stClone
,而非Student
。