c++ 中的抽象方法是否曾经调用过?

Is an abstract method in c++ ever called?

本文关键字:调用 曾经 是否 抽象方法 c++      更新时间:2023-10-16

假设我有一个抽象类,其中包含一个名为print的函数。假设我有另一个类继承自 elder 类并定义函数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;
}

假设我有一个抽象类,其中包含一个名为"print"的函数。假设我有另一个从父类继承并定义函数打印的类。说"父亲"类函数打印永远不会被调用是对的吗?

不。

我的辩论是在一个案例中,我有一个指向"儿子"的"父亲"指针。我使用此指针调用打印函数。除非我将函数声明为虚拟函数,否则它应该尝试使用抽象函数。

是的,所以如果不virtual,将调用"father"函数(或者,至少,将尝试这样做(。这回答了您之前的问题。

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

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

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