我想知道如何使用引用进行多态性,而不是指针.
为了澄清,请参阅以下最小示例:
class A;
class B {
public:
A& a; ///////////////// <- #1
B();
void doStuff();
};
class A {
public:
virtual void doSmth() = 0;
};
void B::doStuff() {
a.doSmth();
}
class A1 : public A {
public:
void doSmth() {
}
};
B::B() : a(
* ////////////// <- #2
(new A1) /////////// <- #3
) {
}
Run Code Online (Sandbox Code Playgroud)
这个编译和工作,但这里最重要的一点是,a在行中#1是一个引用,所以为了能够多态地使用它(是一个真正的单词?),如行#3I 所示必须"转换指针参考"通过解除引用它.
这让我觉得有点奇怪,我想知道是否有更好的(在更清洁的意义上)方式.只有我吗?
如果我根本不需要它会很好new,但是当声明(!)时B我不知道如何创建A1(!)的实例和 …