假设我有一个像这样的带有单个抽象虚函数的类:
class MyClass{
public:
virtual void MyFunc() = 0;
};
而且我没有其他功能,也没有数据成员。我还可以保证所有继承自该类的类都没有任何数据成员,并且除了 MyFunc
的实现之外没有其他函数。
迫使你拥有一个指向抽象对象的指针的最大原因(至少在我看来)是实现的大小是未知的......那么有没有一种方法可以代替拥有指向此类的指针只是给出类的一个实例(或伪实例)。以此为例:
void AFunction(MyFunc inst){ //Note the lack of pointer
inst.MyFunc(); //This should call the implementation
}
这有可能吗,还是我只是一厢情愿?
最佳答案
您必须传递指针或引用。您不能按值传递,因为根据定义,这涉及复制值;并且,再次根据定义,您不能复制抽象类的实例。 C++ 不是这样工作的。
因此,请选择:
void AFunction(MyFunc *inst){
inst->MyFunc();
}
或
void AFunction(MyFunc &inst){
inst.MyFunc();
}
这些是您的选择。子类是否除了虚方法实现还有其他东西,或者抽象类是否除了虚方法还有其他东西,都是无关紧要的。答案不变。
关于c++ - 没有指针的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151499/