c++ - 没有指针的继承

标签 c++ pointers inheritance

假设我有一个像这样的带有单个抽象虚函数的类:

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/

相关文章:

inheritance - 因为我们可以使用简单的单级继承获得相同的感觉,所以我们什么时候需要虚函数?

c++ - 我正在尝试通过使用访问器和增变器函数从 main() 将值存储在类中的变量中

c++ - 将const char *分配给char *

java - 类描述中要写什么

c++ - 继承:动态派生类成员与静态派生类成员

c - 在初始化期间为指针分配字符串值时到底发生了什么?

c++ - 为什么C++中存在 `inline`关键字?

c++ - 静态函数是否隐藏同名的非静态函数?

c++ - C++中的回调模板

c++ - 在 C++ 中正确地将 `void*` 转换为整数