首页 > 解决方案 > 曾经调用过 c++ 中的抽象方法吗?

问题描述

假设我有一个抽象类,其中包含一个名为print. 假设我有另一个类继承自老类并定义了 function print。说老类函数print永远不会被调用对吗?我的辩论是在我有一个长辈指针指向一个孩子的情况下进行的。我print使用这个指针调用函数。除非我将函数声明为virtual它应该尝试使用抽象函数。但它不能,这就是我卡住的地方。提前致谢。

编辑:我添加了一个例子。感谢这个建议,因为它解决了我的问题。没有非虚拟抽象方法之类的东西。

// Example program
#include <iostream>
using namespace std;

class A{
public:
 void print()=0;//I have to add virtual before declaring function
};
void A::print(){
    cout<<"1"<<endl;
    }

class B: public A{
    public:
    void print(){cout<<"2"<<endl;}
    };

int main(){
  B b;
  b.print();
  A* a=&b;
  a->print();
  b.A::print();//here I called the abstract method
  return 0;
}

标签: c++functionclassabstract

解决方案


假设我有一个带有一个名为“print”的函数的抽象类。假设我有另一个类继承自父类并定义了函数 print。说永远不会调用“父亲”类函数 print 是否正确?

不。

我的辩论是在我有一个“父亲”指针指向“儿子”的情况下。我使用这个指针调用打印函数。除非我将函数声明为虚拟函数,否则它应该尝试使用抽象函数。

是的,所以如果不是virtual,“父亲”函数将被调用(或者,至少会尝试这样做)。这回答了你之前的问题。

如果是virtual,则覆盖意味着将调用子函数。Father::print()但是,如果为该函数提供了定义,仍然可以调用基本版本(例如,从子版本中) 。

但它不能,这就是我卡住的地方。

我不知道你这个是什么意思。


推荐阅读